我有超过 1/2 百万个文件要散列到多个文件夹中 md5/crc hashing 花费的时间太长一些文件的大小为 1GB ~ 11Gb 我正在考虑使用 head 对文件的一部分进行哈希处理
因此,在散列查找和散列所有内容时,以下内容有效。
find . -type f -exec sha1sum {} \;
我只是确定如何更进一步,只是对文件的第一个 256kB 进行哈希处理,例如
find . -type f -exec head -c 256kB | sha1sum
不确定在这种情况下是否可以使用 head dd 会更好吗? 上面的命令不起作用,所以寻找有关如何执行此操作的想法
我希望输出与 native md5sum 中看到的相同,例如以下格式(转到文本文件)
<Hash> <file name>
我不确定上面的内容是否可以用单行或者是否需要使用 for/do 循环......性能是在 RHEL6 上使用 bash 的关键
最佳答案
目前还不清楚您的限制在哪里。您的磁盘或 CPU 速度慢吗?
如果您的磁盘不是限制,您可能会受到使用单核的限制。 GNU Parallel 可以帮助解决这个问题:
find . -type f | parallel -X sha256sum
如果限制是磁盘 I/O,那么您对 head
的想法非常合理:
sha() {
tail -c 1M "$1" | sha256sum | perl -pe 'BEGIN{$a=shift} s/-/$a/' "$1";
}
export -f sha
find . -type f -print0 | parallel -0 -j10 --tag sha
-j10
的最佳值取决于您的磁盘系统,因此请尝试调整它直到找到最佳值(可以低至 -j1
)。
关于linux - md5/sha1 散列大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817057/