Unixコマンドラインのコンテキストで2つの非常に大きなファイル(それぞれ約1TB)を可能な限り進行インジケータで比較したいと思います。
diff
試してみましたが、cmp
どちらもシステム(macOS Mojave)をクラッシュさせ、進行状況バーを表示します。
このように大容量ファイルを比較する最良の方法は何ですか?
追加の詳細:
私は彼らが同じであることを確認したいと思います。
cmp
システムが独自に再起動するようにシステムをクラッシュさせます。 :-( たぶんシステムのメモリが足りませんか?
答え1
同一または異なるという事実に関する情報を取得するには、ハッシュを使用する1つの可能な方法があります。次のコマンドはsha1
ファイルのハッシュを提供します。
shasum file1 file2
予想される結果は次のようになります。
ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file1
ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file2
答え2
pv
これを進行状況インジケータとして使用し、shasum
関数にパイプしてハッシュが同じであることを確認できます。
pv file1 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%
303462e848ecbec5f8ab12718fa6239713eda1c6 -
pv file2 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%
303462e848ecbec5f8ab12718fa6239713eda1c6 -
答え3
各ファイルから数GBを削除し、タイミングを調整し、適切にサイズ変更して合計時間を見積もることができます。さらに、進行状況バーはバイト数を計算する必要があり、これにより時間が50%まで延長される可能性があります。
実際にループを使用してファイルを100個に分割し(ddまたはパイプでhead -c + tail -cを使用)、お気に入りの比較ツールを使用して各部分について報告できます。
利点:
(a)1%の間隔で進行状況レポートを提供します。
(b)最初に違いがある場合は、より早く答えを得ることができ、ファイルの残りの部分を確認せずにループを終了できます。
(c) 10GB ファイルを比較すると、システムが再起動しないことがあります。
(d)ファイルの既知の領域のより詳細な分析(分割と征服)を実行するように調整できます。
(e)アドレス範囲の一部を複数のCPUに割り当てることができます。