私はそこにすべてのファイルを開いてZipする必要がある2つのディレクトリがあります。私の問題は、私のzipファイルはそれぞれ5MBに過ぎず、これらのファイルは大きいということです。私はそれらを圧縮する前にいくつかのサイズでこれらのファイルをどのようにグループ化する必要があります。私は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 $!;
ありがとう:私はいくつかのコードを持っているが、ここで誰かがこれを行う方法を知っているならば、私は思っていた、ここにもコードです!
perlを使用する必要があるのは何ですか?コマンドライン 'zip'ユーティリティには、特定のサイズでzipファイルを分割する' -s'スイッチがあります。 – Kevin
はい、それは私が取り組んでいる現在のプログラムの一部になるので、Perlでなければなりません。 – Andre