有没有办法替换符号链接的值?
例如,我想从此更改符号链接:
first -> /home/username/foo/very/long/directories/that/I/do/not/want/to/type/again
对此:
second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again
我只想更改foo
为bar
.
当然我可以再次创建一个链接,但是如果可以替换链接的值,那就变得更容易了。
答案1
您可以使用-f
,--force
选项ln
让它在创建新符号链接之前删除现有符号链接。如果目标是目录,则需要添加-n
,--no-dereference
选项来告诉ln
将符号链接视为普通文件。
ln -sfn target existing_link
但是,此操作不是原子操作,调用之前的旧符号链接ln
也不是原子操作,因此从技术上讲,它不算更改链接的值。如果您关心这种区别,那么答案是否定的,您无法更改现有符号链接的值。unlink()
symlink()
也就是说,您可以执行如下操作来创建新的符号链接,更改部分旧链接值:
ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"
答案2
second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again
如果你在 X 内部运行:
stat second
将打印链接和一些其他信息。键入ln -s
,然后/home/username/bar/very/long/directories/that/I/do/not/want/to/type/again
用鼠标光标突出显示。按中间按钮(如果只有两个按钮,则按两个按钮)。您不想再次输入的长行将被粘贴到文本光标处。
如果您不在 X 中,您可以通过安装gpm
.