有两个目录foo1和foo2.
起初,我通过ln -s foo1 bar. 之后我想更改符号链接,所以我输入ln -sf foo2 bar
但bar仍与foo1. 符号链接foo2是在foo1.
我应该怎么输入,当我想要替换foo1的foo2?
我在三种环境中进行了测试。
Dre*_*pin 21
正确的方法是使用-n, --no-dereference像这样的选项。
$ ln -snf foo2 bar
Run Code Online (Sandbox Code Playgroud)
这导致ln将现有符号链接视为文件。否则,将取消引用bar到foo1,下降到foo1并使用原TARGET名称作为LINK_NAME,这就是为什么你用一个符号链接落得foo2内部创建foo1目录。联机帮助页ln说明以下内容...
-n, --no-dereference
如果 LINK_NAME 是指向某个文件的符号链接,则将其视为普通文件
目录
下面是我的 Arch Linux 桌面上的 shell 输出,版本 8.21ln有和没有--no-dereference选项,我得到了与没有--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
Run Code Online (Sandbox Code Playgroud)