Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 178
  • Last Modified:

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

0
ICT-KevinM
Asked:
ICT-KevinM
  • 2
  • 2
2 Solutions
 
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
 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now