in reply to Create zip files for each sub-directory under a main directory
I believe something like the following should get you close to where you want to be.
Given this directory structure:
orig |-a |- a.txt |-b |- b.txt |-c |- c.txt
...and running this code:
use strict; use warnings; use Archive::Zip; use File::Basename; use File::Copy::Recursive; use File::Find::Rule; use constant AZ_OK => 0; my $mkvingestdir = 'orig'; my $mkvingestdest = 'new'; my $zip_dest = 'zipped'; File::Copy::Recursive::dircopy $mkvingestdir, $mkvingestdest or die "copy failed: $!\n"; my @dirs = File::Find::Rule->directory() ->in($mkvingestdest); for my $dir (@dirs){ next if $dir =~ /(?:\.|\.\.)/; next if $dir eq $mkvingestdest; my $zip = Archive::Zip->new; $zip->addDirectory($dir); my $name = basename $dir; if ($zip->writeToFileNamed("$zip_dest/${name}.zip") != AZ_OK){ print "error in archive creation\n"; next; } print "archive created successfully\n"; }
I get the following zip files in the zipped zip destination directory:
$ ls zipped/ a.zip b.zip c.zip
|
|---|