2011-05-31 76 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