md5 / sha1散列大文件

我有超过一百万个文件散列在多个文件夹md5 / crc散列花费的时间太长一些文件的大小是1GB〜11Gb我想只使用散列文件的一部分

所以下面的工作,当涉及到散列发现和哈希的一切。

find . -type f -exec sha1sum {} \; 

我只是确定如何进一步采取这一步,只是做散列的第一个说256KB的文件,例如

 find . -type f -exec head -c 256kB | sha1sum 

不知道如果头是好的在这个例子中会使用dd会更好吗? 上面的命令不起作用,所以寻找我如何做到这一点的想法

我希望输出与在本地md5sum中看到的相同,例如以下格式(转到文本文件)

 <Hash> <file name> 

林不知道如果上述是可能的一行或将需要使用for / do循环…..性能是在RHEL6上使用bash的关键

目前还不清楚你的限制。 你有一个缓慢的磁盘或一个缓慢的CPU?

如果你的磁盘不是这个限制的话,你可能会受限于使用一个内核。 GNU Parallel可以帮助你:

 find . -type f | parallel -X sha256sum 

如果限制是磁盘I / O,那么你的想法是非常有道理的:

 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 )。