使用perl来定时备份一些重要的文件,思路大致如下:
当你打开文件进行读写操作的时候,让这个perl程序运行,作用是实时监控你当前文件夹内文件的变化,当你保存你操作的文件的时候,它会打印到屏幕,该文件夹发生了变化,然后是某个文件发生了变化,打印后,会自动把发生变化的文件(根据最后修改和保存时间确定变化与否)拷贝到指定目录。
下面是perl代码,只要按照这个代码,将目录调整为你自己的目录保存为备份.pl,存放在你的工作目录就行了。
可以放在任意目录,因为添加了读取当前目录的语句,省却了输入目录的麻烦,不用针对不同的目录修改路径。
#必要模块
use File::Monitor;
use File::Copy::Recursive qw(fcopy rcopy dircopy fmove rmove dirmove);
use Cwd;
$dir=getcwd; #获取当前pl文件所在目录
$monitor = File::Monitor->new();
$files="$dir";
opendir(AA,$files) || return;
@list = readdir(AA);
closedir (AA);
foreach $file (@list) { $monitor->watch( $file ); }
$monitor->callback( mtime => sub {
($file, $event, $change) = @_;
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = gmtime();
$hour=$hour-6; ############ need to be modified to your local time zone.
$year = 1900 + $yearOffset;
$theGMTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
print "$file changed at $theGMTimenn";
if (-d "d:/备份") { fcopy ("$file","d:/备份"); } #指定缺省备份目录
else { fcopy ("$file","e:/备份"); } #指定备用备份目录
} );
while (1) {
$monitor->scan;
sleep 10; #指定扫描文件变化的时间间隔,如果太短,将占用较大资源,可以适当调大一些,毕竟你会非常频繁的保存文件。
# After the first scan we get a list of File::Monitor::Delta objects
# that describe any changes
my @changes = $monitor->scan;
for my $change (@changes) {
# Call methods on File::Monitor::Delta to discover what changed
if ($change->is_mtime) {
my $name = $file_name;
}
}
}