回答:
2つのファイルが同一であるかどうかを判断する最も一般的な方法の1つ(サイズが一致すると仮定)は、プログラムを使用してファイルの「ハッシュ」(本質的に指紋)を作成します。最も一般的なものはmd5sum
とsha1sum
です。
例えば:
$ md5sum file1 file2
e0e7485b678a538c2815132de7f9e878 file1
4a14aace18d472709ccae3910af55955 file2
あなたは、あるシステムから別のシステムへのファイルの完全なディレクトリを転送している場合には、例えば、チェックする必要があることを多くのファイルがある場合は、ファイルへの元のシステムからの出力をリダイレクトすることができ、そしてmd5sum
/ sha1sum
自動的に伝えるために、そのファイルを使用することができますどのファイルが異なるか:
$ md5sum file1 file2 > MD5SUMS
... copy file1, file2, MD5SUMS across
$ md5sum --check MD5SUMS
file1: OK
file2: OK
それらが同じであるかどうかだけを知りたい場合は、sha1sumが使用可能であればそれを使用するか、md5をフォールバックとして使用することを好みます。
それらがどの程度異なるか、どこが異なるかを知りたい場合は、一時ファイルを作成してからそれらをod(通常は16進オプションを持つ「オクタルダンプ」)で両方ともクランクすることで動作します。
100 MB以上のファイルでベンチマークを実行しました。diffが最速で、cmpが2番目、md5sumが最後に使用されました。
# time diff file1 file2; echo $?
real 0m0.122s
user 0m0.009s
sys 0m0.113s
0
# time cmp file1 file2; echo $?
real 0m0.213s
user 0m0.097s
sys 0m0.117s
0
# time md5sum file1 > /tmp/test; time md5sum file2 > /tmp/test2; diff /tmp/test /tmp/test2; echo $?
real 0m0.279s
user 0m0.211s
sys 0m0.066s
real 0m0.316s
user 0m0.225s
sys 0m0.073s
0
4.3 GBのファイルを使用して演習を再実行しましたが、RAMキャッシュが結果に大きな影響を与えていたため、ddを使用してファイルを削除および再作成する必要がありました。
$time diff file1 file2; echo $?
real 0m19.325s
user 0m0.995s
sys 0m5.280s
0
$time cmp file1 file2; echo $?
real 0m36.106s
user 0m4.399s
sys 0m6.147s
0
$time md5sum file1 > /tmp/test; time md5sum file2 > /tmp/test2; diff /tmp/test /tmp/test2; echo $?
real 0m10.441s
user 0m8.054s
sys 0m2.357s
real 0m24.682s
user 0m8.027s
sys 0m3.442s
0
これらの結果に基づいて、ファイルをRAMFSマウントに移動し、diffを使用することをお勧めします。