符号链接:查找链接到该文件的所有文件


115

大家好,我需要在linux中执行此操作:

  • 给出:文件名“ foo.txt”
  • 查找:所有指向“ foo.txt”的符号链接的文件

怎么做?谢谢!


Answers:


132

这取决于是否要查找指向特定文件的链接,foo.txt,那么这是唯一的好方法:

find -L / -samefile path/to/foo.txt

另一方面,如果您只是想查找指向恰好名为的任何文件的链接foo.txt,则类似

find / -lname foo.txt

要么

find . -lname \*foo.txt # ignore leading pathname components

问题解决得很好。感谢所有回答的人。
lukmac

8
当我评论删除的答案时,您可以使用-xtype l仅查找列表符号链接
Hasturkun 2011年

您可能要递归,因为指向foo.txt的任何文件本身可能都由其他链接指向...例如:A-> B-> foo.txt,/ tmp / C-> B-> foo.txt的,等等
奥利维尔·杜拉克

如果您的名称组件是链接中命名的父目录,那么这也可以工作find . -lname '*foo.dir*'(通过搜索(例如匹配file.txt -> ../foo.dir/file.txt))
Yonatan

22

查找文件的索引号,然后搜索具有相同索引号的所有文件:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

或者,尝试使用的lname选项find,但是如果您有相对的符号链接,则此方法将无效,例如a -> ../foo.txt

$ find . -lname /path/to/foo.txt

3
如果使用的是最新版本的GNU find,则也可以使用-samefile具有-L相同效果的选项,而不必自己查找inode
Hasturkun 2011年

5
但这还会在其他文件系统上找到恰好具有相同inode编号的文件。
DigitalRoss

如果foo是目录,请ln -di在一行中使用:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77 '16

1
这个答案是错误的。一个符号链接没有与其目标相同的索引节点。这仅适用于符号链接文件夹中的文件。但这不是要问的。
朱尔斯·拉莫尔

4

我更喜欢使用该symlinks实用程序,该实用程序在搜索损坏的符号链接时也很方便。安装方式:

sudo apt install symlinks

显示当前文件夹和子文件夹中的所有符号链接:

symlinks -rv .
  • -r:递归
  • -v:详细(显示所有符号链接,不仅是断开的符号链接)

要找到特定的符号链接,只需grep

symlinks -rv . | grep foo.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.