Domanda

Voglio verificare l'integrità di un backup di un disco Ubuntu, copiato con dd su una condivisione di Windows. Non c'è spazio sufficiente per decomprimere il backup. Esiste un'utilità per calcolare md5 di un file compresso senza decomprimerlo completamente?

È stato utile?

Soluzione

Questa:

gzip -d -c myfile.gz | md5sum

eseguirà lo streaming del contenuto decompresso in md5sum, invece di caricare tutto in memoria.

Se si tratta di un file zip, il comando è unzip -p myfile.zip | md5sum

Altri suggerimenti

La semplice risposta usando gzip / zcat e il piping su md5sum (che qualcuno ha già pubblicato mentre stavo scrivendo questo) funzionerà, ma se vuoi divertirti di più, ecco un breve script Perl che farà la stessa cosa.

#!/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";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top