2011-05-31 176 views
79

哈罗所有的所有文件,我需要这样做在Linux中:符号链接:找到链接到该文件

  • 考虑:文件名“foo.txt的”
  • 查找:是符号的所有文件链接到'foo.txt'

如何做到这一点?谢谢!

+0

可能重复的[Linux:查找给定'原始'文件的所有符号链接? (reverse'readlink')](http://stackoverflow.com/questions/4532241/linux-find-all-symlinks-of-a-given-original-file-reverse-readlink) – Vality 2014-08-01 09:59:13

回答

95

这取决于,如果你正在努力寻找链接到被称为foo.txt,一个特定的文件,那么这是唯一的好办法:

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

在另一方面,如果你只是试图找到链接任何文件碰巧被命名为foo.txt,事遂所愿

find/-lname foo.txt 

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

问题解决得很漂亮。感谢所有回复的人。 – lukmac 2011-05-31 09:08:09

+7

正如我评论一个已删除的答案,你可以使用'-xtype l'来查找你想要递归的符号链接 – Hasturkun 2011-05-31 09:08:20

+0

,因为任何指向foo的文件都可以。txt本身可能会被其他链接指向...例如:A-> B-> foo.txt,/tmp/C->B->foo.txt等 – 2013-11-07 17:31:39

17

找到文件的inode编号,然后搜索所有文件具有相同的inode编号:

$ ls -i foo.txt 
41525360 foo.txt 

$ find . -follow -inum 41525360 

或者,尝试findlname的选择,但如果你有相对的符号链接,这将不起作用例如a -> ../foo.txt

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

如果使用最近版本的GNU发现,你也可以使用'-samefile'选项和'-L'来获得同样的效果,而不必自己查找inode – Hasturkun 2011-05-31 08:45:57

+5

但是这也会在其他文件系统上发现具有相同inode编号的文件。 – DigitalRoss 2011-05-31 08:50:08

+0

如果'foo'是一个目录,则在一行中使用'ln -di':'find。 -follow -inum $(ls -di foo.txt | cut -d“”-f1)' – rubo77 2016-08-07 05:17:33

0

我更喜欢使用symlinks实用工具,用于破碎的符号链接搜索时也很方便。安装方式:当前文件夹中

sudo apt install symlinks 

显示所有符号链接和子文件夹:

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

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

symlinks -rv . | grep foo.txt