http://qs1969.pair.com?node_id=783254
Category: Utility Scripts
Author/Contact Info Matthew Young mabufo@gmail.com
Description:

I wrote this utility to assist me in backing up files from my hard drive to an external drive. This is my first perl script!

I tested this on the latest activeperl installation on windows vista. This script requires File::Copy::Recursive.

If anyone has suggestions on how to improve this script either by code improvements, or feature additions post your ideas here! I would appreciate it. Sorry about the formatting.

=head1 NAME

File autobackup utility

=head1 SYNOPSIS

  autobackup -d:
          The d flag backs up files to/from the locations hardcoded in
+to 
          the script. Only use this if you have edited in your own loc
+ations.          
  autobackup -h:
          The h flag displays usage information. Use it for instructio
+ns.
  
  autobackup -p FILEPATH:
          The p flag should be used if you have not set up the script 
+to work with the d flag. 
          When calling the script with the p flag, you should specifiy
+ the filepath of the files you want 
          to be copied as an argument: "autobackup -p C:\myfiles". You
+ will then be asked for a target 
          location for the files in the directory that you specified w
+hen you called the program. 
          
  I'M ASSUMING WE ALL KNOW HOW TO ENTER PROPPER FILEPATHS... 

=head1 DESCRIPTION

In a nutshell, this script copies files from one location to another. 
I wrote this script to transfer files from my computer to an external 
+drive easily more easily.

=head1 DEPENDENCIES

This script requires the File::Copy::Recursive module. 

=head1 AUTHOR

Matthew Young (mabufo@gmail.com) [www.theangrywalrus.com/blog]

=cut


#!usr/bin/perl
use strict;
use warnings;
use File::Copy::Recursive qw(dircopy);
use Getopt::Std;
use Pod::Usage;

#--------file copy vars (uncomment if you want)
#local $File::Copy::Recursive::SkipFlop = 1; #keeps the script going i
+f somethign fails
#$File::Copy::Recursive::MaxDepth #you can set this to change the maxi
+mum depth of the copy.

#I get to play with hashes a bit...
#grabs our argv values and stores them in a hash (key is the flag, val
+ue is the actual argument)
my %options=();

getopts('dp:h', \%options); 
pod2usage(2) if (keys %options != 1);

if ($options{d}){
    #if 'default' flag: 
    #paths can be changed by editing what's in qw() - on the left is l
+ocation of files, 
    #on the right is where you want to put them.
    my ($original, $targetlocation) = qw/C:\test C:\test1/;
    my ($numberoffiles, $numberofdirs, $depth) = dircopy($original, $t
+argetlocation) or die $!;
    print "$numberoffiles files copied, across $numberofdirs directori
+es, at a level of depth of $depth.";
}
if ($options{p}){
    #if 'path' flag:
    my $original = $options{p};
    print "Target directory: ";
    my $targetlocation = <STDIN>;
    chomp $targetlocation;
    my ($numberoffiles, $numberofdirs, $depth) = dircopy($original, $t
+argetlocation) or die $!;
    print "$numberoffiles files copied, across $numberofdirs directori
+es, at a level of depth of $depth.";
}
if ($options{h}){
    pod2usage(2); #YES!
}
Once again I apologize for the formatting - it looks a lot better inside of eclipse :). This is my first actual script - so if you guys see any glaring errors or bad practices - point them out! EDIT: Now with Pod::Usage!!