Compression 在未完全解包的情况下检查压缩文件的md5

Compression 在未完全解包的情况下检查压缩文件的md5,compression,md5,Compression,Md5,我想检查Ubuntu磁盘备份的完整性,用dd复制到Windows共享上。空间不足,无法解压缩备份。是否有一个实用程序可以计算压缩文件的md5而不完全解包?此: gzip -d -c myfile.gz | md5sum 将解压后的内容流式传输到md5sum中,而不是将整个内容加载到内存中 如果它是一个zip文件,那么命令是unzip-pmyfile.zip | md5sum使用gzip/zcat和管道到md5sum(在我写这篇文章的时候有人已经发布了)的简单答案将起作用,但是如果你想获得更多的

我想检查Ubuntu磁盘备份的完整性,用dd复制到Windows共享上。空间不足,无法解压缩备份。是否有一个实用程序可以计算压缩文件的md5而不完全解包?

此:

gzip -d -c myfile.gz | md5sum
将解压后的内容流式传输到md5sum中,而不是将整个内容加载到内存中


如果它是一个zip文件,那么命令是
unzip-pmyfile.zip | md5sum

使用
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";

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

md5sum file.gz
验证md5和我的,我认为这不需要解包。
如果我错了,请纠正。

如果未压缩文件是二进制文件,请不要忘记使用
md5sum-b
。如果
md5sum
是gnu(例如,linux、mac和大多数unix),则“二进制”和“文本”模式之间没有区别,除了输出将包含一个不相关的星号(
*
)表示“二进制”而不是“文本”的“空格”在读取stdin时,在文件名/或破折号(
-
)旁边(运行
md5sum--help
查看它是否为gnu)如果没有gzip文件的md5sum怎么办?如果之前没有gzip文件的md5sum,如何验证它?在我的例子中,gzip文件中包含md5sum文件,但不是gzip文件的itself@AppajiChintimigzip文件具有包含时间戳的元数据。即使解压后的数据相同,gzip文件也可能有不同的MD5和。@ZtoYi收到了,谢谢