场景:我正在编写一个检查目录是否存在的 shell 脚本;如果是这样,并且它是一个符号链接,它会重命名目录.bak
并附加到目录名称。然而,我注意到,如果我将一个符号链接目录(目录 A)移动到另一个符号链接目录(B),它会导致 A 被移动到B 内部,而不是覆盖 B。
为了显示:
$ mkdir foo
$ mkdir bar
$ ln -s "$PWD/foo" ~/.baz
$ ls -al ~/.baz
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:45 /Users/ysim/.baz -> /Users/ysim/foo
$ mv ~/.baz ~/.bam
$ ls -al ~/.bam
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:45 /Users/ysim/.bam -> /Users/ysim/foo
$ ls -al ~/.baz
ls: /Users/ysim/.baz: No such file or directory
$ ln -s "$PWD/bar" ~/.baz
$ ls -al ~/.baz
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:47 /Users/ysim/.baz -> /Users/ysim/bar
$ ls -al ~/.bam
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:45 /Users/ysim/.bam -> /Users/ysim/foo
现在,当我重命名/移动~/.baz
到~/.bam
:
$ mv ~/.baz ~/.bam
~/.baz
( )的目标/Users/ysim/bar
不会~/.bam
像预期的那样移动到 的目标:
$ ls -al ~/.bam
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:45 /Users/ysim/.bam -> /Users/ysim/foo
相反,整个~/.baz
符号链接已移动到~/.bam
目录中:
$ ls -al ~/.bam/
total 8
drwxr-xr-x 3 ysim staff 102 Sep 11 21:47 .
drwxr-xr-x+ 96 ysim staff 3264 Sep 11 21:51 ..
lrwxr-xr-x 1 ysim staff 15 Sep 11 21:47 .baz -> /Users/ysim/bar
这是为什么?我该如何去做我打算做的事情,即将目标写入目标~/.baz
目标~/.bam
,这样~/.bam
就有了目的地/Users/ysim/bar
?