シンボリックリンク:このファイルにリンクするすべてのファイルを検索します


115

こんにちは、私はこれをLinuxで行う必要があります:

  • 与えられた:ファイル名 'foo.txt'
  • 検索:「foo.txt」へのシンボリックリンクであるすべてのファイル

どうやってするの?ありがとう!


回答:


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 2011年

8
削除された回答についてコメントしたように、-xtype lリストのシンボリックリンクのみを検索するために使用できます
Hasturkun

foo.txtをポイントしているファイルのいずれかが他のリンクによってポイントされている可能性があるため、再帰したい場合があります...例:A-> B-> foo.txt、/ tmp / C-> B-> foo.txtなど
Olivier Dulac 2013年

これは、名前コンポーネントがリンクで名前が付けられた親ディレクトリである場合find . -lname '*foo.dir*'(たとえば、と一致する場合file.txt -> ../foo.dir/file.txt)にも機能します
Yonatan

22

ファイルのiノード番号を見つけて、同じiノード番号を持つすべてのファイルを検索します。

$ 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を

5
しかし、これにより、偶然同じiノード番号を持つ他のファイルシステム上のファイルも検出されます。
DigitalRoss、

場合はfoo、ディレクトリ、使用することであるln -di:1行で、find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77

1
この答えは間違っています。シンボリックリンクには、ターゲットと同じiノードがありません。これは、symlinkedフォルダー内のファイルに対してのみ機能します。しかし、これは要求されたものではありません。
Jules Lamur、2018年

4

symlinks壊れたシンボリックリンクを検索するときにも便利なユーティリティを使用することを好みます。インストール方法:

sudo apt install symlinks

現在のフォルダーとサブフォルダー内のすべてのシンボリックリンクを表示します。

symlinks -rv .
  • -r:再帰的
  • -v:詳細(壊れたものだけでなく、すべてのシンボリックリンクを表示します)

特定のシンボリックリンクを見つけるには、次のようにしgrepます。

symlinks -rv . | grep foo.txt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.