2009-06-28 4 views
4

Ich möchte die Integrität einer Sicherung einer Ubuntu-Festplatte, mit dd auf eine Windows-Freigabe kopiert überprüfen. Es ist nicht genügend Speicherplatz zum Entpacken der Sicherung vorhanden. Gibt es ein Dienstprogramm, um die MD5 einer komprimierten Datei zu berechnen, ohne sie vollständig zu entpacken? Dieseüberprüfen MD5 der komprimierten Datei ohne es vollständig zu entpacken

Antwort

11

:

gzip -d -c myfile.gz | md5sum 

den dekomprimiert Inhalt in md5sum streamen, anstatt die ganze Sache in den Speicher geladen werden.

+0

Vergessen Sie nicht, 'md5sum -b' zu verwenden, wenn die unkomprimierte Datei binär ist. – tudor

2

Die einfache Antwort gzip/zcat und Rohrleitungen mit md5sum (was schon jemand geschrieben, während ich dies schreibe) funktioniert, aber wenn Sie mehr Spaß haben wollen, hier ein kurzer Perl-Skript, das das gleiche tun wird .

#!/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

danke euch beiden, ich habe vergessen, auf diese Frage zu überprüfen – jdog

Verwandte Themen