我创建了一个符号链接:
sudo ln -s /some/dir new_dir
现在我想覆盖符号链接以指向新位置,它不会覆盖。我试过了:
sudo ln -f -s /other/dir new_dir
我总是可以sudo rm new_dir
,但如果可能的话,我宁愿相应地覆盖它。有什么想法吗?
答案 0 :(得分:61)
ln -sfn /other/dir new_dir
适合我。 -n
不会取消引用目标符号链接。
答案 1 :(得分:9)
您可以创建它,然后移动它:
sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir
编辑:缺少-Tf,将目录视为常规文件,不提示覆盖。
这样你就会覆盖它。
答案 2 :(得分:1)
由于来自mikeytown2s评论的链接被破坏,我将解释为什么redent84s answer更好:
虽然
ln -sfn newDir currentDir
完成工作,它不是原子操作,你可以用strace看到:
$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir") = 0
symlink("newDir", "currentDir") = 0
当您有一个指向该符号链接的Web服务器根目录时,这很重要。删除符号链接并再次创建时,它可能会导致错误 - 即使在一微秒的时间内也是如此。
要防止错误,请改用:
$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir
这将创建一个临时链接,之后在原子操作中覆盖 currentDir 。