linux - md5/sha1 散列大文件

标签 linux bash hash

我有超过 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/

相关文章:

c - ftruncate 不适用于 Mac OS X 中的 POSIX 共享内存

python - 从 Python3 中的文件名列表中查找文件的绝对路径

bash - Docker Run执行shell命令无法访问PATH环境变量

c - 如何将另一个程序的输出作为管道传递到我的程序?

java - java中hashmap数据结构的实现

linux - 适用于 Linux 的 Monogame : monodevelop cannot find assemblies for monogame, nvorbis 和 opentk

bash - 如何获得第一个可用的 TCP 端口来监听?

php - 将带有散列密码的用户表从旧的 php 应用程序迁移到新的 laravel 应用程序

c# - 将 md5 哈希字节数组转换为字符串

python - Linux 屏幕上的 Flash 字符