6

我想检查用 dd 复制到 Windows 共享上的 Ubuntu 磁盘备份的完整性。没有足够的空间来解压备份。是否有一个实用程序可以在不完全解压缩的情况下计算压缩文件的 md5?

4

3 回答 3

15

这:

gzip -d -c myfile.gz | md5sum

会将解压缩的内容流式传输到 md5sum 中,而不是将整个内容加载到内存中。

如果是 zip 文件,则命令为unzip -p myfile.zip | md5sum

于 2009-06-28T10:21:22.083 回答
2

使用gzip/zcat和管道连接到 md5sum 的简单答案(在我写这篇文章时有人已经发布过)会起作用,但如果你想玩得更开心,这里有一个简短的 Perl 脚本,它可以做同样的事情。

#!/usr/bin/perl

use strict;
use warnings;

use Archive::Zip qw/:ERROR_CODES :CONSTANTS/;
use Digest::MD5;

die "Usage: $0 zipfile filename" unless @ARGV == 2;

my $zipfile = $ARGV[0];
my $filename = $ARGV[1];

my $z = Archive::Zip->new();
die "Error reading $zipfile" unless $z->read($zipfile) == AZ_OK;
my $member = $z->memberNamed($filename);
die "Could not find $filename in $zipfile" unless $member;
$member->desiredCompressionMethod(COMPRESSION_STORED);
$member->rewindData();

my $md5 = Digest::MD5->new;
while(1) {
        my($buf,$status) = $member->readChunk();
        $md5->add($$buf) if $status == AZ_STREAM_END || $status == AZ_OK;
        last if $status == AZ_STREAM_END;
        die "IO Error" if $status != AZ_OK;
}
my $digest = $md5->hexdigest;
print "$digest  $zipfile/$filename\n";
于 2009-06-28T11:21:10.823 回答
0

这很复杂吗?我的方法是,只需使用

md5sum file.gz

并用我拥有的那个来验证 md5 总和,我认为这不需要解压。纠正我,如果我错了。

于 2020-08-01T12:31:06.243 回答