Сценарий: я пишу сценарий оболочки, который проверяет, существует ли каталог; если это так, и это символическая ссылка, он переименовывает каталог с добавлением .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
?