foo1
とfoo2
の2つのディレクトリがあります。
まず、ln -s foo1 bar
でディレクトリシンボリックリンクを作成します。その後、シンボリックリンクを変更したいので、ln -sf foo2 bar
と入力しました
ただし、bar
はfoo1
とリンクしています。 Symlink foo2
はfoo1
内に作成されます。
foo1
をfoo2
に置き換えるには、何を入力すればよいですか?
3つの環境でテストしました。
これを行う適切な方法は、そのような-n, --no-dereference
オプションを使用することです。
$ ln -snf foo2 bar
これにより、ln
は既存のシンボリックリンクをファイルとして扱います。それ以外の場合は、bar
をfoo1
に逆参照し、foo1
に降りて、元のTARGET
名をLINK_NAME
として使用します。そのため、 foo2
ディレクトリ内に作成されるfoo1
へのシンボリックリンク。 ln
のマンページには、次のように記載されています...
-n、--no-dereference LINK_NAMEが ディレクトリへのシンボリックリンクである場合、それを通常のファイルとして扱います
以下は、--no-dereference
オプションを使用した場合と使用しない場合のバージョン8.21のln
を使用したArch Linuxデスクトップのシェル出力です。--no-dereference
オプションを使用しない場合と同じ結果が得られましたが、 --no-dereference
オプションは期待どおりに機能しました。
$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
total 0
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2