2009-06-28 102 views

回答

11

此:

gzip -d -c myfile.gz | md5sum 

都要流解壓的內容轉換成的md5sum,而不是裝載整個事情到內存中。

+0

如果未壓縮文件是二進制文件,不要忘記使用`md5sum -b`。 – tudor 2016-10-28 00:44:33

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"; 
+0

謝謝你,我忘了檢查這個問題 – jdog 2011-01-04 00:50:48