in reply to Multiple zip files from directories!
Update: Fixed copy/paste scoping bug; see Re^3: Multiple zip files from directories! for information. Also initialized $total as per Anonymous Monk's suggestion below.#!/usr/bin/perl -w use strict; use Archive::Zip qw/AZ_OK/; use File::Temp qw/tempfile/; use constant MB => 1024 * 1024; my $dir = qw( zip_this/); my @files = do { opendir my $fd, "$dir" or die $! or die $!; grep -f, map "$dir$_", readdir $fd; }; my $zip = Archive::Zip->new; my $total = 0; my $limit = 5*MB; my $FileCount = 0; my $archiveCount = 0; 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 $!; if ($total + $member->compressedSize > $limit) { $zip->writeToFileNamed("zipped_$archiveCount.zip") == AZ_OK or + die $!; $archiveCount++; print "Total archive size: $total bytes\n\n"; $total = 0; $zip = Archive::Zip->new; } $zip->addMember($member); $total += $member->compressedSize; } print "Total archive size: $total bytes\n"; $zip->writeToFileNamed("zipped_$archiveCount.zip") == AZ_OK or die $!;
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Multiple zip files from directories!
by Anonymous Monk on Sep 15, 2011 at 15:24 UTC | |
Re^2: Multiple zip files from directories!
by Anonymous Monk on Sep 15, 2011 at 19:39 UTC | |
by kennethk (Abbot) on Sep 15, 2011 at 20:44 UTC |