假设我有一个文件和一个目录:
$ 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 -s
and的符号链接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 中指定的:如果你有
readlink
你可以使用它:如果您
readlink
支持该-f
选项,您可以使用它来完全规范化目标(即,如果目标符号链接包含其他符号链接,则解析目标路径中的所有符号链接)。您可以
cp -P
用来制作符号链接的副本:(假设
symlink3
尚未作为目录或目录符号链接存在,请参阅-T
GNU 的选项以cp
了解这些情况)。请注意,如果符号链接的目标是相对的,如果副本与原始文件不在同一目录中,则上述内容可能会导致链接断开。
与
zsh
,将创建
symlink3
为完整规范(无符号链接)路径的符号链接symlink2
,例如,ln -s -- "$(readlink -f symlink2)" symlink3
但更可靠的是,如果该路径以换行符结尾,它仍然可以正常工作。与上述相同的警告和相同的解决方法 GNU
ln
。