我创建了一个符号链接:无法覆盖符号链接RedHat Linux上
sudo ln -s /some/dir new_dir
现在我要覆盖符号链接指向一个新的位置,它不会覆盖。我曾尝试:
sudo ln -f -s /other/dir new_dir
我总能sudo rm new_dir
,但我宁愿有它相应的,如果可能的覆盖。有任何想法吗?
我创建了一个符号链接:无法覆盖符号链接RedHat Linux上
sudo ln -s /some/dir new_dir
现在我要覆盖符号链接指向一个新的位置,它不会覆盖。我曾尝试:
sudo ln -f -s /other/dir new_dir
我总能sudo rm new_dir
,但我宁愿有它相应的,如果可能的覆盖。有任何想法吗?
ln -sfn /other/dir new_dir
适合我。 -n
不解引用目标符号链接。
您可以创建它,然后移动它:
sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir
编辑:缺少-Tf,治疗目录作为一个常规文件,并且不提示进行覆盖。
这样你会覆盖它。
由于从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在一个原子操作。
好点。从手册页:'-h如果target_file或target_dir是符号链接,请不要关注它。这对于使用-f选项非常有用,可以替换可能指向目录的符号链接。“# – redent84 2011-03-09 21:37:46
'-n'等效于'-h'(至少在MacOS X上) – redent84 2011-03-09 21:39:10