perl 增量、全量备份脚本
发布时间:2020-12-15 23:48:27 所属栏目:大数据 来源:网络整理
导读:脚本采用json配置文件,可以自定义,备份目录,全量备份周期,增量备份时间等。 {"backupDir":"/data_backup","archiveDir":"/archive_dir","original":"/www/","fullDayBase":10} #!/usr/bin/perluse warnings;use File::Copy::Recursive qw/dircopy rcopy/
脚本采用json配置文件,可以自定义,备份目录,全量备份周期,增量备份时间等。 {"backupDir":"/data_backup","archiveDir":"/archive_dir","original":"/www/","fullDayBase":10} #!/usr/bin/perl use warnings; use File::Copy::Recursive qw/dircopy rcopy/; use File::Rsync; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); use JSON; use File::Basename; use POSIX qw(strftime); use Data::Dumper; my ( $day,$json ); my $backupDate = strftime( "%Y%m%d",localtime(time) ); open JSON,"/sh/rsyncfile/backupconf.json" or die "$!"; $json = $_ while <JSON>; my $hashRef = decode_json $json; my $originalDir = $hashRef->{original}; #记得加/,不加/ 弹鸡鸡 my $backupDir = $hashRef->{backupDir}; my $archiveDir = $hashRef->{archiveDir}; my $fullDayBase = $hashRef->{fullDayBase}; #全备份周期 $day = $1 if $backupDate =~ /(d{2})$/; mkdir $backupDir unless -d $backupDir; mkdir $archiveDir unless -d $archiveDir; rsync_dir( $originalDir,$backupDir ); #同步目录 if ( $day % $fullDayBase == 0 ) { #判断周期 for my $zipName ( glob "$backupDir/*" ) { my $zipFromDir = basename($zipName); $zipName = basename($zipName) . "_" . $backupDate . '.zip'; print $zipName,"n"; zip_dir( $backupDir,$archiveDir,$zipName,$zipFromDir ); } } #压缩目录 sub zip_dir { my ( $backupDir,$zipFromDir ) = @_; my $zip = Archive::Zip->new(); my $dirMember = $zip->addTree( "$backupDir/$zipFromDir",$zipFromDir ); #递归压缩目录 unless ( $zip->writeToFileNamed("$archiveDir/$zipName") == 0 ) { die 'write error'; } } #同步目录 sub rsync_dir { my ( $source,$target ) = @_; print "rsync file from $source to $targetn"; # archive 归档模式 # compress 压缩 # verbose 打印详细信息 my $obj = File::Rsync->new( { archive => 1,compress => 1,del => 1,verbose => 1 } ); $obj->exec( { src => $source,dest => $target } ) or warn "rsync failedn"; #输出同步内容 print $obj->out; } #复制 sub copy { my ( $source,$target ) = @_; print $source,"n"; if ( -d $source ) { $File::Copy::Recursive::CPRFComp = 1; dircopy( $source,$target ) or die "$!"; } else { rcopy( $source,$target ) or die "$!"; } return 1; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |