use Path::Class qw( dir ); my $srcdir = dir( '/var/local/some_dir' ); my $destdir = dir( '/backup/some_dir' ); $destdir->mkpath unless -d $destdir; die "$srcdir does not exist" unless -d $srcdir; die "$destdir does not exist" unless -d $destdir; print "Beginning backup...\n"; while ( my $file = $srcdir->next ) { next if $file->is_dir; my $target = $destdir->file( $file->basename.".gz" ); if ( $file->stat->mtime <= $target->stat->mtime ) { print "backup is more recent than original\n"; next; } system( "gzip -c $file > $target" ); if ( $? != 0 ) { die "Gzip failed" } print "$file archived in $destdir\n"; }