使用perl定时备份文件的方法

发布时间:2020-08-10编辑:脚本学堂
使用perl来定时备份一些重要的文件,思路大致如下:
当你打开文件进行读写操作的时候,让这个perl程序运行,作用是实时监控你当前文件夹内文件的变化,当你保存你操作的文

使用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;
        }
    }
 }