orig
|-a
|- a.txt
|-b
|- b.txt
|-c
|- c.txt
####
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";
}
####
$ ls zipped/
a.zip b.zip c.zip