【发布时间】:2023-03-25 16:20:01
【问题描述】:
场景:我正在编写一个检查目录是否存在的 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?
【问题讨论】:
标签: shell symlink overwrite mv ln