特定のファイル用に作成されたすべてのシンボリックリンクを見つけて一覧表示する方法は?


52

特定のファイルまたはディレクトリのさまざまなパスに多くのシンボリックリンクを作成しました。作成されたシンボリックリンクのパス(場所)の一覧が必要です。

例:

~/Pictures多くのディレクトリにディレクトリのシンボリックリンクを作成しました。その~/Picturesディレクトリへのすべてのシンボリックリンクをリストするにはどうすればよいですか?

それは可能ですか?はいの場合、どのように?


完全に検索する必要があります。ハードリンクのようにカウントは保存されません。findを使用して回答の1つを参照してください。
ctrl-alt-delor 14年

回答:


42

以下に例を示します。

find -L /dir/to/start -xtype l -samefile ~/Pictures

または、多分良い:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

以下のようないくつかのエラーを取り除くためにPermission deniedToo many levels of symbolic linksまたはFile system loop detectedそのfind右の権限やその他の状況を持っていないときにそれらをスローします。

  • -L -シンボリックリンクをたどります。

  • -xtype l -ファイルはシンボリックリンクです

  • -samefile name-ファイルはと同じiノードを参照していnameます。-Lが有効な場合、これにはシンボリックリンクを含めることができます。

ノート:

  • -xtype l数字の1ではなく、小文字のLを使用します。
  • macOS / Darwinでは、-xtypeです-type

パスを含むシンボリックリンクを見つけるためにコマンドを変更できますか?例:〜/ Pictures / A、〜/ Pictures / A / B / C、または〜/ Pictures>のサブディレクトリ内のファイルにリンクする可能性のあるシステム全体のファイル
-snowbound

7

非常にシンプル、オプションを使用します-lname

find / -lname /path/to/original/dir

からman find

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

:シンボリックリンクは、リモートシステム(ファイルを共有している場合)を含む任意の場所にある可能性があるため、すべてを見つけることができない場合があることに注意してください。


シンボリックリンクのような相対パスである場合にも注意してください、../dirそれは絶対的な見つけることはできません/path/to/original/dirあなたの代わりに偽陽性アウトパターンと雑草使用することができます-lname \*dir
ジェイソンS

2

これを試して :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(同じiノード番号を持つディレクトリを検索します)

すべてのシンボリックリンクパスが表示されます。


4
これにより、シンボリックリンクではなくハードリンクが検索されます。ハードリンクはiノード番号を共有します。シンボリックリンクには異なるiノード番号があります。シンボリックリンクのiノードには、ブロックリストの代わりにパスがあります。
hildred

質問はハードまたはソフトシンボリックリンクについて言及していませんでした
nux 14年

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