我想检查Ubuntu磁盘备份的完整性,用dd复制到Windows共享上。没有足够的空间来解压缩备份。是否有一个实用程序来计算压缩文件的md5而不完全解压缩它?
答案 0 :(得分:13)
此:
gzip -d -c myfile.gz | md5sum
将解压缩的内容流式传输到md5sum,而不是将整个内容加载到内存中。
如果是zip文件,则命令为unzip -p myfile.zip | md5sum
答案 1 :(得分: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";
答案 2 :(得分:0)
这很复杂吗?我的方法是,只需使用
md5sum file.gz
并用我的那个验证md5的总和,我认为这不需要解压。 纠正我,如果我错了。