У меня есть 2 каталога, которые я должен открыть и сжать все файлы там. Моя проблема в том, что мои zip-файлы могут занимать всего 5 МБ каждый, и эти файлы большие. Я должен кое-как сгруппировать эти файлы по размеру, прежде чем архивировать их. Я хотел бы сделать это с помощью модуля Perl Archive :: Zip. У меня есть некоторый код, но мне было интересно, если кто-то здесь знает способ сделать это, ну вот код:
#!/perl/bin/perl -w
use strict;
use warnings;
use Archive::Zip qw/AZ_OK/;
use File::Temp qw/tempfile/;
use constant MB => 1024 * 1024;
#my @dir = '/dir1 dir2/';
my $dir = qw( dir1/);
my @files = do {
opendir my $fd, "$dir" or die $! or die $!;
grep -f, map "$dir$_", readdir $fd;
};
my $zip = Archive::Zip->new;
my $total;
my $limit = 5*MB;
foreach my $file (@files) {
my $temp = Archive::Zip->new;
my $member = $temp->addFile($file);
next unless $member->compressedSize;
my $fh = tempfile();
$temp->writeToFileHandle($fh) == AZ_OK or die $!;
$zip->addMember($member);
$total += $member->compressedSize;
die "$total bytes exceeds archive size limit" if $total > $limit;
}
print "Total archive size: $total bytes\n\n";
$zip->writeToFileNamed('zipped.zip') == AZ_OK or die $!;
Спасибо! * * 1004