#!perl.exe use strict; use warnings; use File::Path "mkpath"; use File::Copy; use File::Spec; use Archive::zip; my $copy_from = 'C:/My Documents'; # local net copy my $copy_to = 'x:\backup'; # my network share rCopy($copy_from,$copy_to); sub rCopy { my $src = shift; my $dest = shift; $dest = $dest . ".zip"; #print "**** $src\n"; if( -f $src ) { # if file on unix also include -l from sym link print "DEBUG: " . (stat($src))[9] . " - " . (stat($dest))[9] . "$dest\n"; if(-f $dest && (stat($src))[9] <= (stat($dest))[9]) { # target file exists and in older print "--- Skipping file $dest\n"; } else { my $zip = Archive::Zip->new(); my $file = $zip->addFile($src); print "Createing Zip File $dest\n"; unless ($zip->writeToFileNamed($dest) == 0 ) { warn "--- Could not create zip file\n"; }; #print "+++Coping file $src to $dest\n\r"; #copy $src, "$dest" || print "$!\n"; } } elsif( -d $src ) { # $src is a directory, open dir read contents. my ($volume,$dir,$file) = File::Spec->splitpath( $src,1 ); print "*****Creating Dir: $copy_to/$dir\n\r"; eval { mkpath (["$copy_to/$dir"]); }; die "Could not create Path $copy_to $dir $@" if($@); my $dh = undef; opendir( $dh, $src ); my @files = grep { (! /\.$/) } readdir($dh); foreach my $rSrc (@files) { print "Calling rCopy($src\/$rSrc,$copy_to\/$dest\/$rSrc)\n\r"; rCopy("$src" . "/$rSrc", "$copy_to/$dir/$rSrc"); #print "Skipping Dir: $src\n"; } } }