合計数百万のファイル(合計テラバイト)を含む多くのフォルダがあります。すべてのファイルで重複したファイルを見つけたいです。理想的には、出力は簡単なチートのリストです。私のスクリプトを使ってさらに処理します。
fdupes
ファイルを比較するために「ファイルサイズとMD5署名」を使用するコマンドがあることを知っています。
私にとって明確ではないのは、私が望んでいない一意のサイズのファイルを読んでいるのか(そしてそのハッシュが計算されたのか)ということです。私の場合、データボリュームが膨大で、必要なものよりも多くのディスクI / Oを実行しないように注意が必要でした。また、使用される一時スペースの量を最小限に抑える必要があります。
答え1
FSリントバックエンドはfindup
あなたに必要なものかもしれません。
FSlintはファイルをスキャンし、さまざまなサイズのファイルをフィルタリングします。次に、正確に同じサイズの残りのファイルをチェックして、ハードリンクではないことを確認します。ユーザーが結果を「マージ」することを選択すると、以前の検索でハードリンクファイルが生成されることがあります。 FSlintは、ファイルがハードリンクではないと判断した場合、md5sumを使用してファイルにさまざまな署名があることを確認します。 md5sum 競合を防ぐために、FSlint は sha1sum 検査を使用して残りのファイルの署名を再検査します。
答え2
リントファイルシステムで重複排除などを実行し、後続の実行を高速化するために必要に応じてxattrsを介して情報をキャッシュし、カスタム方法で使用できるようにメタデータをjson形式で提供できる非常に効果的なツールです。
rmlint finds space waste and other broken things on your filesystem and offers to remove it. It is able to find:
Duplicate files & directories.
Nonstripped Binaries
Broken symlinks.
Empty files.
Recursive empty directories.
Files with broken user or group id.
答え3
はい、サイズが他のファイルと一致すると、md5全体が生成されるようです。これは無駄につながる可能性があります。大容量ファイルの場合、より効率的なアプローチは、最初のチャンクをmd5し、一致する場合にのみ詳細を調べることです。
つまり、サイズを確認し、一致すると最初のブロック(512k)のmd5を確認し、一致すると次の2つのブロック(1024k)のmd5を確認します。