Linux 仅获取指向文件的sym链接

Linux 仅获取指向文件的sym链接,linux,find,symlink,Linux,Find,Symlink,我调查了一下,但他们似乎没有解决问题 如果我执行find-L-samefile路径/to/file 结果包含硬链接和符号链接 我一直试图想出一个解决方案,只获取符号链接,但似乎无法解决它。 我一直在尝试将-samefile和-type l组合起来,但这并没有给我带来任何好处 man find 表示可以将某些选项合并到表达式中,但我没有正确地执行。 非常感谢您的帮助 好吧,一开始我完全误解了这个问题 为了只找到某个文件的符号链接,我认为组合多个命令仍然是一种好方法。 因此,您知道要链接到的文件,

我调查了一下,但他们似乎没有解决问题

如果我执行
find-L-samefile路径/to/file
结果包含硬链接和符号链接

我一直试图想出一个解决方案,只获取符号链接,但似乎无法解决它。 我一直在尝试将
-samefile
-type l
组合起来,但这并没有给我带来任何好处

man find
表示可以将某些选项合并到表达式中,但我没有正确地执行。
非常感谢您的帮助

好吧,一开始我完全误解了这个问题

为了只找到某个文件的符号链接,我认为组合多个命令仍然是一种好方法。 因此,您知道要链接到的文件,我们称之为
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-键入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放置其接收的输入的所有位置。因此,它将有效地将其替换为\u find\u命令的
ls-l output\u

非常感谢,效果非常好:)如果从/directory运行该命令,则生成结果需要非常长的时间(超过10分钟)。但是,当我从~dir调用命令时,它会飞起来并给出正确的答案。我的一个朋友想出了一个不同的解决方案;我会把它贴在这里,以防有人觉得有用。“find$(find-L-samefile path/to/file 2>/dev/null)-type L”添加2>dev/null可以避免在尝试访问权限不足的某些文件时在屏幕上显示错误消息。我将接受您的回答:)将错误重定向添加到null确实是个好主意。我认为你的朋友2查找命令也是不错的解决方案。