<?xml version="1.0" encoding="windows-1252"?>
<node id="777931" title="Simple r-copy style backup" created="2009-07-07 12:30:16" updated="2009-07-07 12:30:16">
<type id="1748">
sourcecode</type>
<author id="77032">
gman</author>
<data>
<field name="doctext">
&lt;code&gt;
#!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 &amp;&amp; (stat($src))[9] &lt;= (stat($dest))[9]) { 
		# target file exists and in older
		print "--- Skipping file $dest\n";
		} else {
		my $zip = Archive::Zip-&gt;new();
		my $file = $zip-&gt;addFile($src);
		print "Createing Zip File $dest\n";
		unless ($zip-&gt;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-&gt;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";
		}
	}
}


&lt;/code&gt;</field>
<field name="codedescription">
Simple script I used to back up my Laptop before lease exchange.  Was not looking to reinvent the wheel, saw rcopy after I wrote this and rcopy requires rsync.  I was running XP with activestate perl, so seemed just as easy to write something quick that would do the job.  

update: Thanks graff for pointing out the error I had with mkpath
&lt;c&gt;
eval { mkpath (["$copy_to/$dir"]); }; 
die "Could not create Path $copy_to $dir $@" if($@);
&lt;/c&gt;</field>
<field name="codecategory">
Utility Scripts</field>
<field name="codeauthor">
http://perlmonks.org/?node_id=77032</field>
</data>
</node>
