我有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'實用程序有一個'-s'開關,可將zip文件分割成特定的大小。 – Kevin
是的,它必須在Perl中,因爲它將成爲我正在開發的當前程序的一部分。 – Andre