特定のファイルへのすべてのハードリンクを見つける方法は? [コピー]

特定のファイルへのすべてのハードリンクを見つける方法は? [コピー]

特定のファイルへのすべてのハードリンクをどのように見つけることができますか?つまり、ハードリンクが与えられたら、同じファイルへの他のすべてのハードリンクを見つけますか?

ファイルシステムはファイルへのハードリンクを追跡しますか?

ファイルのinodeには、ハードリンクではなくファイルへのハードリンクの数だけが格納されます。そうですか?

答え1

指定されたファイルが呼び出され、/path/to/file現在のディレクトリの下に存在するすべてのハードリンクを見つけるには、次のようにします。

find . -samefile /path/to/file 

上記はGNU findでテストされました。-samefileそうですがPOSIXではない、それもサポートしますMac OSXを探すそしてFreeBSDを探す

文書

GNUからman find

-samefile name
       ファイルは、name と同じ inode を参照します。 -L が適用されると、ここにシンボリックリンクを含めることができます。

検索とlsの違い

ls -lファイルまたはディレクトリへのハードリンクの数を一覧表示します。ディレクトリの場合、この数は表示された結果の数よりも大きいですfind . -samefile。その理由はGNU検索マニュアル:

ディレクトリには通常、親ディレクトリに指定されたエントリと、ディレクトリ.内のエントリの2つ以上のハードリンクがあります。ディレクトリにサブディレクトリがある場合、各サブディレクトリには..親ディレクトリへのハードリンクがあります。

findコマンドラインに記載されていない限り、ディレクトリエントリ.は通常検索されません。..

ls -l要約すると...ディレクトリは別々のハードリンクと見なされますが、find . -samefileそうではありません。

関連情報