シナリオ: ディレクトリが存在するかどうかを確認するシェル スクリプトを作成しています。存在し、それがシンボリックリンクである場合、ディレクトリ名に.bak
追加してディレクトリの名前を変更します。ただし、シンボリックリンクされたディレクトリ (ディレクトリ A) を別のシンボリックリンクされたディレクトリ (B) に移動すると、B が上書きされるのではなく、A が 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