语境:
我有一个大型TB驱动器,其中包含各种类型的大型媒体文件,ISO映像文件等。md5sum
由于速度/性能,我想使用第一个兆字节来验证其内容。
您可以创建一个总和,如下所示:
FILE=four_gig_file.iso
SUM=$(head -c 1M "$FILE" | md5sum)
printf "%s *%s\n" ${SUM%-} "$FILE" >>test.md5
您将如何验证这一点,因为第一个兆字节的签名与整个文件的签名不同?
我已经用其他语言看到了这一点,但是我想知道如何在Bash中做到这一点。我已经尝试过各种md5sum -c
涉及管道等的排列方式。
无需使用md5sum -c
,您是否需要将哈希重新计算到一个新文件中,然后对它们进行“比较”?
您可以使用
find /directory/path/ -type f -print0 | xargs -0 md5sum blah blah
处理大量文件。
PS:不能选择Rsync
更新2:就目前而言-
使用head,find和md5sum;然后,可以从源目录中快速创建一个文件,然后在目标位置上进行计算后,在另一侧与diff进行比较。是否有巧妙的单行代码或脚本?
仅通过采样文件的第一个兆字节来验证内容可能不会检测到某些较大的文件是否已经以一种或另一种方式损坏,损坏或更改。这样做的原因是,当可能有数百个其他兆字节可能关闭时,您仅给哈希算法一个兆字节的数据。甚至在错误位置上的一点也会给出不同的签名。
如果要验证数据完整性,最好使用CRC32算法。它比MD5快。尽管可以伪造/修改文件以使其看起来具有正确的CRC32签名,但随机的损坏位不太可能做到这一点。
更新:
这是一个不错的方法,可以对每个文件执行基于1兆字节的md5校验和:
find ./ -type f -print0 | xargs -0 -n1 -I{} sh -c "echo '{}' >> output.md5 && head -c 1M '{}' | md5sum >> output.md5"
如果您愿意,请用cksum替换md5sum。注意,我选择在输出中包括文件名。这是因为当您不给md5sum整个文件时,文件名字符串不会被传递。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句