Ln

ln:使用另一個符號連結創建符號連結

  • October 8, 2018

假設我有一個文件和一個目錄:

$ 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被呼叫symlink1,以及一個符號連結到dir被呼叫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 -sand的符號連結ln -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

問題是:是否有可能/如何使用另一個符號連結創建指向原始文件的符號連結?

-L僅適用於硬連結;如POSIX 中指定的

如果指定了**-s選項,則-L-P**選項應被忽略。

如果你有readlink你可以使用它:

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

如果您readlink支持該-f選項,您可以使用它來完全規範化目標(,如果目標符號連結包含其他符號連結,則解析目標路徑中的所有符號連結)。

您可以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

引用自:https://unix.stackexchange.com/questions/473928