我有超过一百万个文件来散列多个文件夹 md5 / crc散列耗时太长,有些文件大小为1GB~11Gb 我想用头部
来散列文件的一部分因此,当涉及散列查找和散列所有内容时,以下内容都有效。
find . -type f -exec sha1sum {} \;
我只是确定如何更进一步,并为第一个说256kB的文件做哈希,例如
find . -type f -exec head -c 256kB | sha1sum
不确定头部是否可以在这个实例中使用会更好吗? 上面的命令不起作用,所以寻找关于如何做到这一点的想法
我希望输出与原生md5sum中的输出相同,例如以下格式(转到文本文件)
<Hash> <file name>
我不确定上述是否可以使用单行或者是否需要使用for / do循环.....使用RHEL6上的bash,性能是关键
答案 0 :(得分:4)
目前还不清楚你的限制在哪里。你有慢盘还是慢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
)。