проверьте md5 сжатого файла, не распаковывая его полностью

Из npm документов :

git://github.com//.git#

git://github.com//.git#feature\/

Начиная с версии NPM 1.1.65, вы можете сделать это:

/#

6
задан jdog 28 June 2009 в 10:11
поделиться

2 ответа

Это:

gzip -d -c myfile.gz | md5sum

будет передавать распакованный контент в md5sum, вместо того, чтобы загружать все это в память.

Если это zip-файл, команда unzip -p myfile.zip | md5sum

14
ответ дан 8 December 2019 в 14:45
поделиться

Простой ответ с использованием 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";
2
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: