Daily Backup using Perl

I need to make a Perl backup script that creates a new dated folder every day, copies data from a source folder to the new dated folder until it reaches 28 days, then deletes the oldest folder and continues. This will have to function in Server 2k3. Below is what I have so far - I started getting confused when generating and naming the folders failed. Any Perl Genius want to help out?
#! C:\Perl\bin
 
use Date::Calc qw(Day_of_Week Week_Number Day_of_Week_to_Text);
use Time::localtime;
 
$tm = localtime;
($day, $month, $year) = ($tm->mday, $tm->mon, $tm->year);
 
###########################
# Set date/time/day of week
 
$year = $year+1900;
$month = $month+1;
$wday = Day_of_Week($year, $month, $day);
$wnum = Week_Number($year, $month, $day);
print "date set\n";
 
###########################
# Create new folders by date
 
use POSIX qw[strftime];
 
$DestDir='e:\budata';
$SourceDir='d:\source';
 
$DateDir=strftime("%a_%b_%d_%Y",localtime());
 
$DestDirFinal="$DestDir/$DateDir";
 
if(-e $DestDirFinal) {
      system("rm -fr $DestDirFinal");
}
 
mkdir($DestDirFinal) or die "Could not mkdir: $!\n";
system("cp -R $SourceDir $DestDirFinal");

Open in new window

ICT-KevinMAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Adam314Commented:
Instead of using system, you should use perl commands, as it'll be easier to tell if it was successful.

Instead of "rm -fr" (a unix command - I thought you need win2k3?) to remove directories, you should use the rmtree from the File::Path module.

Instead of "cp -R" (again unix command?) to copy, use File::Copy::Recursive.

using these modules will also make your script more portable, in case it is needed on both unix and windows systems.
0
ICT-KevinMAuthor Commented:
Thanks Adam - I guess I having been reading so much information on Perl, I have begun to blur the lines between perl and unix commands. Is it possible for me to name folders based on local date using a Perl command? I have searched high and low.
0
Adam314Commented:
Yes, you can use the $DestDirFinal like you have, which uses the strftime function to generate the folder name from the date.  Is this not what you wanted?

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
TintinCommented:
You are best not to mix backslashes and forward slashes.  Much easier to stick with forward slashes so you don't need to make differences between Windows and Unix/Linux systems.

change

$DestDir='e:\budata';
$SourceDir='d:\source';


to

$DestDir="E:/budata";
$SourceDir="D:/source";
0
ICT-KevinMAuthor Commented:
Thanks, that's great.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Perl

From novice to tech pro — start learning today.