12

私が知っている唯一の方法は次のとおりです。

find /home -xdev -samefile file1

しかし、それは本当に遅いです。のようなツールを見つけたいと思いますlocate。本当の問題は、ファイルがたくさんあるときに発生します。操作はO(n)だと思います。

4

4 に答える 4

10

inodefromからnameへのマッピングはありません。唯一の方法は、ファイルシステム全体をウォークすることです。これは、ご指摘のとおり、O(ファイル数)です。(実はθ(ファイル数)だと思います)。

于 2009-08-29T12:53:03.983 に答える
8

これは古い質問だと思いますが、 の多くのバージョンには、既知の inode 番号を簡単に一致さfindせるオプションがあります。inumこれは、次のコマンドで実行できます。

find . -inum 1234

これは、許可されていればすべてのファイルに対して実行されますが、一致した場合はいつでも手動で停止できます。find単一の一致の後に停止するオプションがあるかどうかはわかりません(おそらく-execステートメントで?)

これは、ファイルへの出力のダンプ、並べ替えなど、およびその他の方法よりもはるかに簡単であるため、利用可能な場合は使用する必要があります。

于 2014-08-18T17:02:51.480 に答える
7

方法は次のとおりです。

  • などを使用find -printf "%i:\t%pして、inode で始まるすべてのファイルのリストを作成し、一時ファイルに出力します。
  • 最初のフィールド (「:」が追加された i ノード) を抽出し、並べ替えて重複をまとめてから、を使用して重複に制限し、それcut -f 1 | sort | uniq -dを 2 番目の一時ファイルに出力します。
  • fgrep -f2 番目のファイルを文字列のリストとしてロードして検索し、最初の一時ファイルを検索するために使用します。

(私がこれを書いたとき、私はこの質問を重複した inode を持つすべてのファイルを見つけることと解釈しました。もちろん、これの前半の出力を、locate がどのように機能するかのように、inode からパスへの一種のインデックスとして使用することができます。 )

私自身のマシンでは、この種のファイルを頻繁に使用し、それらを整理しています。また、バイナリ検索を適用して、共通のプレフィックスを持つすべての行をすばやく見つけることができるテキスト インデクサー アプリケーションもあります。このようなツールは、このような仕事に非常に役立ちます。

于 2009-08-27T10:52:59.587 に答える
-2

私が通常行うことはls -i <file>、そのファイルの inode を取得してからfind /dir -type f -inum <inode value> -mount. (-mountおそらくパフォーマンスの問題の一部である、異なるファイル システムでの検索を避ける必要があります。)

それ以外は、その程度だと思います。

于 2009-08-27T10:52:28.760 に答える