我调查了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
结果包含硬链接和sym链接。
我一直试图想出一个解决方案来获取只有sym链接,但似乎无法弄明白。
我一直试图将-samefile
和-type l
结合起来,但这让我无处可去。
man find
表示你可以将一些选项组合到一个表达式中,但我没能正确地完成它。 任何帮助非常感谢!
答案 0 :(得分:0)
好的,我最初误解了这个问题。
要仅查找某个文件的符号链接,我认为结合多个命令仍然是一个很好的方法。
因此,您知道要链接到的文件,我们将其称为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的硬链接,folder1/symlink1
是我们感兴趣的符号链接,与folder2/symlink2_to_targetfile
相同。还有另一个符号链接到另一个文件,我们对此不感兴趣。
我将采用的方法是首先使用find . -type l
从指定文件夹递归获取符号链接(我们仍然有完整的路径信息)。
然后将其传递到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