【发布时间】:2011-09-14 18:13:24
【问题描述】:
我有 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 文件拆分为特定大小。 -
是的,它必须在 Perl 中,因为它将是我正在处理的当前程序的一部分。