我调查了symbolic link: find all files that link to this file和 https://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file但他们似乎并没有解决问题。
如果我find -L -samefile path/to/file
结果包含硬链接(hard link)和符号链接(symbolic link)。
我一直在尝试想出一个仅获取符号链接(symbolic link)的解决方案,但似乎无法弄清楚。
我一直在尝试将 -samefile
和 -type l
结合起来,但没有成功。
man find
说你可以将一些选项组合成一个表达式,但我没能正确地做到这一点。 非常感谢任何帮助!
最佳答案
好吧,我一开始完全误解了这个问题。
为了仅查找某个文件的符号链接(symbolic link),我认为组合多个命令仍然是一个好方法。
所以您知道要链接到的文件,我们将其命名为 targetfile.txt
。我们的目录结构如下:
$ ls -laR
.:
total 24
drwxrwxr-x 4 telorb telorb 4096 Mar 28 09:51 .
drwxrwxr-x 57 telorb telorb 4096 Mar 28 09:49 ..
-rw-rw-r-- 1 telorb telorb 21 Mar 28 09:51 another_file.txt
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:52 folder1
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:53 folder2
-rw-rw-r-- 3 telorb telorb 28 Mar 28 09:52 targetfile.txt
./folder1:
total 12
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:52 .
drwxrwxr-x 4 telorb telorb 4096 Mar 28 09:51 ..
-rw-rw-r-- 3 telorb telorb 28 Mar 28 09:52 hardlink
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:49 symlink1 -> ../targetfile.txt
./folder2:
total 12
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:57 .
drwxrwxr-x 4 telorb telorb 4096 Mar 28 09:51 ..
-rw-rw-r-- 3 telorb telorb 28 Mar 28 09:52 hardlink2
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:57 symlink2_to_targetfile -> ../targetfile.txt
lrwxrwxrwx 1 telorb telorb 19 Mar 28 09:53 symlink_to_anotherfile -> ../another_file.txt
folder1/hardlink
中的文件是 targetfile.txt 的硬链接(hard link),folder1/symlink1
是我们感兴趣的符号链接(symbolic link),与 folder2/symlink2_to_targetfile
相同。还有另一个指向另一个文件的符号链接(symbolic link),我们对此不感兴趣。
我采取的方法是首先使用 find . -type l
从指定文件夹递归获取符号链接(symbolic link)(并且我们仍然有完整路径信息)。
然后通过管道将其发送到 xargs
和ls -l
获取链接指向哪个文件的信息,最后 grep 我们的 targetfile.txt
,以便我们删除未指向所需文件的链接。命令完整:
find . -type l | xargs -I % ls -l % | grep targetfile.txt
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:57 ./folder2/symlink2_to_targetfile -> ../targetfile.txt
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:49 ./folder1/symlink1 -> ../targetfile.txt
xargs -I % ls -l %
有时会让人们感到困惑。基本上与 -I %
你告诉 xargs %
符号将表示您希望 xargs 放置它收到的输入的所有位置。因此它将有效地将其替换为 ls -l output_of_find_command
关于linux - 仅获取文件的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701097/