Answers:
确定两个文件是否相同(假设它们的大小匹配)的最常见方法之一是使用程序来创建文件的“ 哈希 ”(本质上是指纹)。最常见的是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
我只是对100 MB以上的文件运行了一些基准测试。diff是最快的,而cmp位居第二,而使用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。