use Archive::Zip; use File::Find; use File::Basename; my $sourceDir = 'C:/sourceDirectory/One'; my $destDir = 'C:/destinationDirectory/Two/'; my @files; find( \&files_to_archive, $sourceDir ); my $zip = Archive::Zip->new(); foreach my $file (@files) { $zip->addFile( $file, basename $file ) } if ($zip->writeToFileNamed("$destDir/textFiles.zip") != AZ_OK) { print "Error creating archive!\n"; } else { print "Archive successfully created!\n"; } sub files_to_archive { push @files, $File::Find::name if (/\.txt$/); }