Answers:
正确的方法是使用-n, --no-dereference
类似的选项。
$ ln -snf foo2 bar
这导致ln
将现有符号链接视为文件。否则,它将取消引用bar
到foo1
,然后下降foo1
并使用原始TARGET
名称作为LINK_NAME
,这就是为什么最终foo2
在foo1
目录中创建符号链接的原因。的手册页ln
指出以下内容...
-n,-无引用 如果LINK_NAME是指向以下文件的符号链接,则将其视为普通文件 目录
以下是我的Arch Linux桌面上具有8.21版(ln
带有和不带有该--no-dereference
选项)的shell输出,我得到了与不带有该选项的结果相同的结果--no-dereference
,但是使用该--no-dereference
选项可以按预期工作。
$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
total 0
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2
ln
命令如此频繁地升级。
ln
与ubuntu和centos相同,目录被覆盖并ln -snf
解决了问题。即使ln -h
是在osx中使用的首选选项。
ln --version
?