计算来自管道的流的每 1MB 部分的 md5sum

osg*_*sgx 3 linux bash disk-image md5sum

我想在 unix/linux 中对大文件和流进行校验和,我想从文件/流的每个大部分,每 1 MB 或每 10 MB 中获得许多校验和。

例如,我有磁盘映像、压缩磁盘映像和原始磁盘的副本。图片的某些部分可能会被修改。磁盘为 50 GB,大约有 50000 个 1 MB 的块。因此,对于每个文件,我想获得 50 000 md5sum 或 sha1sums 以获得修改的概述。单个 md5sum 不会帮助我找到修改偏移量。

对于未压缩的磁盘映像,此任务很容易,在 bash 中使用循环dd工具for计算偏移量并选择(跳过)文件的每 1MB 部分。与磁盘相同:

for a in `seq 1 50000`; do echo -n "$a: "; dd if=image.src bs=1M count=1 skip=$a | md5sum; done
Run Code Online (Sandbox Code Playgroud)

但是现在我想比较压缩图像和未压缩图像而不将其解压缩到磁盘。我7z有解包器,它可以将图像以高达 150-200 MB/s(选项7z e -so image.7z |)的速度解压到标准输出。但是我可以在|符号后面写什么来获得所有文件部分的 md5sum。

Cri*_*itu 8

从 coreutils拆分(大多数 Linux 发行版的默认设置)有一个--filter您可以使用的选项:

7z e -so image.7z | split -b 1000000 --filter=md5sum
Run Code Online (Sandbox Code Playgroud)