ファイルのすべての「エイリアス」リスト(ディレクトリタイプを含む)を効率的に取得するには?

ファイルのすべての「エイリアス」リスト(ディレクトリタイプを含む)を効率的に取得するには?

ファイルの前提:ファイルのすべてのエイリアスリスト(ディレクトリタイプを含む)を効率的に取得するには:

  1. 複数のハードリンク、複数のソフトリンク、およびマルチレベルソフトリンクがある場合があります。
  2. 同じファイルシステムの別の場所にマウントされたディレクトリに存在する可能性があります
  3. 1で言及した機能へのリンクがあるディレクトリの下に存在する可能性があります。

inodeを使用する可能な解決策はありますか?

ベストアンサー1

ハードリンクは、2つのリンクのinode番号を比較することで識別できます。そしてデバイス番号(2つの異なるマウントされたファイルシステムに同じinode番号を持つファイルがある可能性がありますが、デバイス番号は異なります)。デバイス/ノードを手動で読み取る方法を使用するか、代わりにstat $fileそれをfind実行できます-samefile。同じデバイス内でのみ検索すると、ハードリンクをより効率的に検索できます。

find $fsroot/. -mount -samefile $myfile

ソフトリンクはどこにでも配置できるため、より困難です。 inode/デバイスを識別するには、これを逆参照する必要があります。次のコマンドを使用して手動で実行するか、stat -L次のコマンドを使用して自動的に実行できますfind -L

find -L / -samefile $myfile

になります。返品ハードリンクを見つけてください。find特定のインデックスノードを指すソフトリンクだけを検索する簡単な方法はないと思います。

一部のファイルシステムはこの情報をより効率的に知らせることができますが、通常はすべてのファイルをスキャンしたいと思うかもしれません。

おすすめ記事