controlla md5 del file compresso senza decomprimerlo completamente
-
20-08-2019 - |
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?
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