有没有办法替换符号链接的值?

有没有办法替换符号链接的值?

有没有办法替换符号链接的值?

例如,我想从此更改符号链接:

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

我只想更改foobar.

当然我可以再次创建一个链接,但是如果可以替换链接的值,那就变得更容易了。

答案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.

相关内容