ファイルシステム内のすべての重複ファイルを一覧表示するアルゴリズムの設計についてどう思いますか?私の最初の考えではハッシュを使用すると思っていましたが、もっと良い方法があるのだろうかと思っています。心に留めておくべき可能性のあるデザインのトレードオフは何ですか?ルートディレクトリが指定されているファイルシステム内のすべての重複ファイルをリストします。
2
A
答えて
2
すべてのファイルの内容を読み取る必要があるため、すべてのファイルをハッシュするには非常に時間がかかります。
私は、3ステップのアルゴリズムをお勧めします:
- がいる場合にのみ、あなたのディレクトリをスキャンし、パスファイルの&サイズ
- ハッシュ他のファイルと同じサイズを持つファイルのみを書き留め同じサイズのファイルが2つ以上あります。ファイルのサイズが他のファイルと同じであれば、ハッシングは必要なく、内容を1対1で比較するだけです(ハッシュ時間を節約します。後でハッシュ値が必要)
- ハッシュが同じであっても、バイト単位でファイルを比較する必要があります。なぜなら、haファイルのサイズが同じで、ファイルシステムが()のファイルシステムの場合、shは異なるファイルで同じになることがあります。
可能であれば、すべてのファイルを同時に開いて内容を比較することもできます。それは大きなファイルの複数の読み込みを節約します。データの種類に応じて時間を節約するために実装することができる調整がたくさんあります(例:2つの圧縮/ tarファイルが同じサイズ> x Ggigabytesのサイズ(および同じ名前)の場合、内容を読み込まないでくださいプロセスがあれば、ファイルは重複している可能性が非常に高いです)。
このようにして、システム内で一意のサイズのファイルをハッシュしないようにします。多くの時間を節約します。
注:名前は異なる可能性があるため、ここでは名前を考慮しません。
編集:私は研究のビット(遅すぎる)を行い、fdupes
あなたはUN * Xのようなシステムを使用している場合ことを正確に行うように見えることが判明しました:で見
関連する問題
- 1. SQL:指定された列を除いてすべての重複を防ぐ
- 2. 特定のエントリを変更している間に、すべてのファイルの内容が重複します。
- 3. WebクライアントでUrisのリストが指定されている場合、すべてのファイルがダウンロードされない
- 4. リスト内の重複するリスト/指示値を確認する
- 5. Lagom/Play + sbt-assembly:「重複:次のファイルの内容が重複しています」
- 6. すべてのレコードが重複して返されるエンティティクエリ
- 7. 指定されたファイルより古いファイルをすべて削除します
- 8. pydrive:listFileにすべてのファイルがリストされていません
- 9. WinSCP:すべてのファイルがリストされていません
- 10. リストエントリの辞書値をリスト内のすべての辞書に重複して設定する
- 11. すべての重複を返さないエラーサーチコレクション(重複)検索
- 12. 私のプログラムは特定のリスト内のすべての重複数をカウントしませんが、他のすべてに対して有効です
- 13. GL_COLOR_BUFFER_BITマスクが指定されている場合、glBlitFramebufferはすべてのカラー添付ファイルをコピーしますか?
- 14. 一覧隠しフォルダ内のファイルを除き、指定されたディレクトリ内を再帰的にすべてのファイル
- 15. 指定されたディレクトリにゼロサイズのすべてのファイルを削除します
- 16. リスト内のファイルをループして指定したものを移動する(Python)
- 17. スキーム真を返す前に、リスト内の指定されたすべての値を一致させる
- 18. 指定された値のすべての並べ替えのリスト
- 19. リストのすべてのデータ、重複行をマージするとMySQL
- 20. 指定されたディレクトリ内のディレクトリパスを持つすべてのファイルを抽出します。
- 21. Antのプロパティが指定されたディレクトリ内のファイルに設定されています
- 22. 重複する行がすべて削除される
- 23. リストのリスト内の指定された要素を削除します。
- 24. リストからすべての重複を削除する方法
- 25. テンプレートクラスの「すべてのパラメータ化された型」または「すべての引数リスト」の指定方法
- 26. 指定されたディレクトリ内のすべてのバッチファイルを実行しています
- 27. boost :: multi_array内のすべての配列の長さを指定します
- 28. Django syncdb複数のデータベースが指定されているときに重複する行を挿入しようとしています
- 29. ルートディレクトリのすべてのファイルを再帰的にマージする
- 30. 指定された範囲外のリスト内のすべての値を削除するpython
名前または内容によって重複していますか? –