根据文档,命令 ln -f
删除现有的目标文件。这是否意味着如果我创建一个符号链接(symbolic link),-f 应该删除或覆盖目标处的任何现有符号链接(symbolic link)?
我有一个符号链接(symbolic link),比如 L,指向 DIR1 并键入 ln -sf DIR2 L
。但是 L 仍然指向 DIR1。只有在 rm L
之后,此命令才会创建指向 DIR2 的链接。
有了指向文件的符号链接(symbolic link),它的行为符合预期。
指向目录的链接有什么问题?
(Ubuntu 16.04.2 LTS 和 Windows WSL 上的 bash 4.3.48)
当你运行时:
ln -sf DIR2 L
这是在 DIR1 中创建一个符号链接(symbolic link),因为 L 指向 DIR1 并且 ln 取消引用它,创建 L/DIR2 -> DIR1
。
以下内容:
rm -fr DIR1 DIR2 L
mkdir DIR1 DIR2
ln -v -s DIR1 L
ls -la L
ln -v -f -s DIR2 L
ls -la L
将输出:
'L' -> 'DIR1'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1
'L/DIR2' -> 'DIR2'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1
要处理该问题,请使用 answer in this thread on superuser.com 中指示的 --no-dereference
选项.