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

iro*_*and 17 symlink ln

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

例如,我想像这样替换符号链接:

first -> /home/username/foo/very/long/directories/that/I/do/not/want/to/type/again 
Run Code Online (Sandbox Code Playgroud)

second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again
Run Code Online (Sandbox Code Playgroud)

我只想更改foobar.

当然我可以再次创建链接,但是如果可以替换链接的值,它会变得更容易。

Tho*_*man 22

您可以使用-f,--force选项ln让它在创建新符号链接之前删除现有符号链接。如果目标是目录,则需要添加-n,--no-dereference选项以告知ln将符号链接视为普通文件。

ln -sfn target existing_link
Run Code Online (Sandbox Code Playgroud)

然而,这种操作不是原子操作,如lnunlink()调用以前的老符号连接symlink(),因此从技术上讲不能算作改变链接的值。如果您关心这种区别,那么答案是否定的,您不能更改现有符号链接的值。

也就是说,您可以执行以下操作来创建新的符号链接,更改旧链接值的一部分:

  ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"
Run Code Online (Sandbox Code Playgroud)