私が知っている唯一の方法は次のとおりです。
find /home -xdev -samefile file1
しかし、それは本当に遅いです。のようなツールを見つけたいと思いますlocate
。本当の問題は、ファイルがたくさんあるときに発生します。操作はO(n)だと思います。
inode
fromからnameへのマッピングはありません。唯一の方法は、ファイルシステム全体をウォークすることです。これは、ご指摘のとおり、O(ファイル数)です。(実はθ(ファイル数)だと思います)。
これは古い質問だと思いますが、 の多くのバージョンには、既知の inode 番号を簡単に一致さfind
せるオプションがあります。inum
これは、次のコマンドで実行できます。
find . -inum 1234
これは、許可されていればすべてのファイルに対して実行されますが、一致した場合はいつでも手動で停止できます。find
単一の一致の後に停止するオプションがあるかどうかはわかりません(おそらく-exec
ステートメントで?)
これは、ファイルへの出力のダンプ、並べ替えなど、およびその他の方法よりもはるかに簡単であるため、利用可能な場合は使用する必要があります。
方法は次のとおりです。
find -printf "%i:\t%p
して、inode で始まるすべてのファイルのリストを作成し、一時ファイルに出力します。cut -f 1 | sort | uniq -d
を 2 番目の一時ファイルに出力します。fgrep -f
2 番目のファイルを文字列のリストとしてロードして検索し、最初の一時ファイルを検索するために使用します。(私がこれを書いたとき、私はこの質問を重複した inode を持つすべてのファイルを見つけることと解釈しました。もちろん、これの前半の出力を、locate がどのように機能するかのように、inode からパスへの一種のインデックスとして使用することができます。 )
私自身のマシンでは、この種のファイルを頻繁に使用し、それらを整理しています。また、バイナリ検索を適用して、共通のプレフィックスを持つすべての行をすばやく見つけることができるテキスト インデクサー アプリケーションもあります。このようなツールは、このような仕事に非常に役立ちます。
私が通常行うことはls -i <file>
、そのファイルの inode を取得してからfind /dir -type f -inum <inode value> -mount
. (-mount
おそらくパフォーマンスの問題の一部である、異なるファイル システムでの検索を避ける必要があります。)
それ以外は、その程度だと思います。