質問
CSとMathのデータのみを含む大きなディレクトリがあります。サイズは16GBを超えています。タイプは、text、png、pdf、およびchmです。私には現在、2つのブランチがあります。1つは私の兄弟のブランチです。初期ファイルは同じでした。それらを比較する必要があります。 Gitを使用しようとしましたが、読み込み時間が長くなります。
2つの大きなディレクトリを比較する最良の方法は何ですか?
[混合ソリューション]
- <!> quot; ls -R <!> gt; different_files <!> quot;両方のディレクトリ[1]
- <!> quot; sdiff <!> lt;(echo file1 | md5deep)<!> lt;(echo file2 | md5deep)<!> quot; [2]
あなたはどう思いますか?欠点はありますか?
[1] Paul Tomblinに感謝 [2]すべての回答者に感謝します!
解決
既存のコマンド/製品を使用せずに2つのフォルダーを比較する方法:
各ディレクトリをスキャンし、各ファイルのファイルハッシュを作成するプログラムを作成します。各相対ファイルパスとファイルハッシュを含むファイルを出力します。
両方のフォルダーでこのプログラムを実行します。
次に、2つの出力ファイルを比較して、同じかどうかを確認します。これら2つのファイルを比較するには、それらを文字列にロードして、文字列比較を行います。
使用するハッシュアルゴリズムは重要ではありません。 MD5、SHA、CRCなどを使用できます。 出力ファイルのファイルサイズを使用して、衝突の可能性を減らすこともできます。
2つのフォルダーを既存のコマンド/製品と比較する方法:
これを行うプログラムだけが必要な場合は、 diff -rを使用します。 または windiff (Windowsベースのシステムの場合)。
他のヒント
fslintを使用:ウェブサイト。ツールのオプションの1つは<!> quot; Duplicates <!> quot;です。サイトの説明に従って: FSlintで最もよく使用される機能の1つは、重複ファイルを見つける機能です。ハードディスクからlintを削除する最も簡単な方法は、存在する可能性のある重複ファイルを破棄することです。多くの場合、コンピューターユーザーは、異なる名前またはディレクトリの下で、音楽コレクションにまったく同じ曲の4つ、5つ、またはそれ以上のコピーがあることを知らない場合があります。音楽、写真、仕事用文書など、あらゆる種類のファイルをコンピューターに簡単にコピーして複製できます。重複が収集されると、利用可能なハードドライブのスペースを食いつぶします。 FSlintが提供する最初のメニューオプションを使用すると、これらの重複ファイルを見つけて削除できます。
md5deep を使用して、これらのディレクトリ内のすべてのファイルの再帰的なmd5sumリストを作成します。
diffツールを使用して、生成されたリストを比較できます。
一方に存在し、他方には存在しないファイルを検出しようとしていますか?いくつかの提案:
-
<!> quot; ls -R <!> quot;両方のディレクトリで、ファイルにリダイレクトし、ファイルを比較します。
-
<!> quot; rsync -n <!> quot;それらの間で、rsyncがコピーを許可される場合にコピーする必要があるものを確認します。 (-nはrsyncを実行しないことを意味し、-nなしで実行した場合の動作を表示します)
diff
md5sum * | sort
ingします
これにより、異なる/欠落しているファイルに移動します
この質問はすでに回答されていますが、そのようなツールを自分で書くことに興味がない場合は、 tardiff は基本的にあなたが望むことを正確に行い、違いを説明するためのパッチ(tar形式で)の自動作成をサポートするsourceforgeで利用可能です。
これが役立つことを願って