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被调用的符号链接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]anddirslink[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指定选项后,-L-P选项将被默默地忽略。

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

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

如果您readlink支持该-f选项,您可以使用它来完全规范化目标(IE解析目标路径中的所有符号链接(如果目标符号链接包含其他符号链接)。

答案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

相关内容