【发布时间】:2015-01-16 12:20:41
【问题描述】:
我有一个文件 f,我想在该文件上计算一个 SHA1 哈希序列,文件的每个 2 kB 块一个。例如,如果 f 的大小为 1G,我想计算大约 50 万个哈希:字节 0-2047、字节 2048-4095、字节 4096-6143、字节 6144-8192 各一个。理想情况下,我想通过一次读取文件并将结果流式传输到另一个文件或管道来完成所有这些操作。我知道split 和sha1sum 命令,但我不确定如何将它们与其他命令结合以实现此目标。有没有像split 这样的东西可以避免创建中间文件并对计算这些 SHA1 和有用?
如果我在较低级别实现此功能,我当然会按顺序将文件读入一个小缓冲区,然后在为每个新块重用缓冲区之前计算 SHA1 总和,但我更喜欢简单的 bash如果有的话,就一个班轮。在 bash 中有没有好的方法来做到这一点(假设 f 可以包含空字节)?
【问题讨论】:
-
文件可以包含空字节吗? (我猜答案是“是”,但我很可能会问它是“否”。由于in this unix.stackexchange.com question 指出的原因,如果文件可以包含空字节,您的选择会受到更多限制。)
-
我知道could be done easily using Python。因此,如果您可以接受嵌入在 Bash 脚本中的小 Python……
-
是的,在问题末尾添加了说明。
-
@5gon12eder,一个简单的 python 解决方案会很有趣,但我想它会比以
sha1sum为瓶颈的解决方案慢得多。 -
我不认为 Python 解决方案会慢很多。无论如何,计算量大的部分都将在 C 代码中完成。