ln:他のシンボリックリンクを使用したシンボリックリンクの作成

ln:他のシンボリックリンクを使用したシンボリックリンクの作成

ファイルとディレクトリがあるとしましょう。

$ ls -l
total 4
drwxrwxr-x. 2 user user 4096 Oct  8 09:53 dir
-rw-rw-r--. 1 user user    0 Oct  8 09:53 file

私はというfileシンボリックリンクsymlink1dir次のシンボリックリンクを作成しましたdirslink1

$ ls -l
drwxrwxr-x. 2 user user 4096 Oct  8 09:53 dir
lrwxrwxrwx. 1 user user    3 Oct  8 10:03 dirslink1 -> dir
-rw-rw-r--. 5 user user    0 Oct  8 09:53 file
lrwxrwxrwx. 1 user user    4 Oct  8 09:53 symlink1 -> file

次に、次のようにsymlink1シンボリックリンクを作成しますln -sln -sL

$ ln -s symlink1 symlink2
$ ln -sL symlink1 symlink3
$ ln -s dirslink1 dirslink2
$ ln -sL dirslink1 dirslink3

今私が理解したところによると、symlink3を指してfile指しdirslink3ている必要がありますdir。ただし、確認しても、symlink[23]どちらもdirslink[23]元のファイルやディレクトリを指していません。

$ ls -l
drwxrwxr-x. 2 user user 4096 Oct  8 09:53 dir
lrwxrwxrwx. 1 user user    3 Oct  8 10:03 dirslink1 -> dir
lrwxrwxrwx. 1 user user    9 Oct  8 10:03 dirslink2 -> dirslink1
lrwxrwxrwx. 1 user user    9 Oct  8 10:03 dirslink3 -> dirslink1
-rw-rw-r--. 5 user user    0 Oct  8 09:53 file
lrwxrwxrwx. 1 user user    4 Oct  8 09:53 symlink1 -> file
lrwxrwxrwx. 1 user user    8 Oct  8 09:54 symlink2 -> symlink1
lrwxrwxrwx. 1 user user    8 Oct  8 09:54 symlink3 -> symlink1

問題は、他のシンボリックリンクを使用して元のファイルへのシンボリックリンクを作成することが可能かどうかです。

答え1

-Lハードリンクにのみ適用されます。POSIXで指定:

もし-Sオプションを指定した後、-エルそして-血オプションは自動的に無視されます。

お持ちの場合は、readlink次のように使用できます。

ln -s -- "$(readlink symlink1)" symlink4

readlinkこのオプションをサポートしている場合は、-fそれを使用してターゲット(つまりターゲットパスのすべてのシンボリックリンクを確認します(ターゲットシンボリックリンクに他のシンボリックリンクが含まれている場合)。

答え2

cp -P以下を使用してシンボリックリンクのコピーを作成できます。

cp -P symlink2 symlink3

(これはsymlink3ディレクトリまたはディレクトリシンボリックリンクがまだ存在していないと仮定します。この場合は-TGNUのオプションを参照してくださいcp。)

シンボリックリンクの宛先が相対的でコピーがソースと同じディレクトリにない場合、上記の内容によりリンクが失われる可能性があります。

そしてzsh

ln -s -- symlink2(:P) symlink3

symlink3完全に標準的な(シンボリックリンクなし)パスでシンボリックリンクを作成しますsymlink2。同様ln -s -- "$(readlink -f symlink2)" symlink3ですが、より安定しています。パスが改行で終わっても、まだうまくいくからです。

上記と同じ警告とGNUの解決策も同じですln

関連情報