本节和大家一起学习一下如何删除SVN备份库,之前我们学习了删除SVN版本控制信息,大家可以和本节对比一下,看看二者有什么区别,欢迎大家一起来学习删除SVN备份库的方法。

成都创新互联专注于企业成都全网营销、网站重做改版、西充网站定制设计、自适应品牌网站建设、html5、商城系统网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为西充等各大城市提供网站开发制作服务。
删除SVN备份库
 问题描述:
 用svnadminhotcopy备份的svn库是svn一个完整拷贝,保证了备份的完整、可靠。但用这种方式备份出现的问题是:备份占用空间比较大,需要定期进行删除,而我们发现删除非常困难。
 尝试如下:
 1、输入:rm-rfrepos_backup1
 提示访问拒绝。进到repos/db/revs里面发现里面的文件权限都是
 -r--r--r--
 这样的,所以谁也不能用上面的命令进行删除了。
 2、输入:rm-Rrepos_backup1
 遇到每个文件都提示:是否重写权限,选择是,才会删除成功:
 overriderwxrwx---4294967294/usersfor1117/repos1/db/revprops/11249?一个库往往有数十个万个文件,这种删除方式显然不现实。
3、输入:chmod-R777repos_backup1;rm-Rrepos_backup1
 等待半天,提示堆栈溢出。输入ulimit-a查看,堆栈限制为7715;修改这个参数必须重启系统,服务器级别比较高,不敢重启,只好作罢。于是想到了用脚本来进行删除。
删除SVN备份方案设计如下:
 目标:定期删除备份数据,并保证备份数据一直介于7到16份之间
 步骤:
 1、每月1号删除上个月21号之前所有数据
 2、每月15号删除上个月所有数据和本月8号前的所有数据
 3、每月25号删除本月19号之前的所有数据。
 用perl脚本实现,代码如下:
#!/usr/bin/perl
 #Author:xuejiang
 #Site:http://www.scmbbs.com #p#
#本单元:定期删除SVN备份数据,并保证备份数据一直介于7到16份之间,
 #适用:备份目录以mmdd的日期格式命名。
 useCwd;
 useFile::Find;
 &main();
 submain()
 {
 #取得当前时间,根据时间设置定期进行删除
 my$targetDir="/home/backup/svn/hotcopy2/";#定义备份目录。
 my($sec,$min,$hour,$day,$month,$year,$wday,$yday)=localtime(time());
 $month++;
 my$today=sprintf("%02d",$day);
 if($today!~/(01$|15$|25$|)/)
 {
 exit(0);
 }
 my$monthday=sprintf("%02d%02d",$month,$day);
 my$thismonth=sprintf("%02d",$month);
 my($lastmonth,$passdate,$tempstr);
 #定义删除的目录数组,对每个目录调用函数deleteDir进行删除。
 chdir($targetDir);
 my@dir=<*>;
 print@dir;
 if($thismonth=~/01/)
 {
 $lastmonth='12';
 }else
 {
 $lastmonth=$thismonth-1;
 }
 foreachmy$dir(@dir)
 {
 if($dir=~/[^0-9]/)
 {
 next;
 }
 #每月1号删除上个月21号之前所有数据
 if($today=~/01$/)
 {
 $passdate=$lastmonth.'21';
 if($lastmonth=='12')
 {
 $tempstr=substr($dir,0,2);
 if(($tempstrne"01")&&($dir<$passdate))
 {
 &deleteDir($targetDir.$dir);
 }
 }else
 {
 if($dir<$passdate)
 {
 &deleteDir($targetDir.$dir);
 }}}
 #每月15号删除上个月所有数据和本月8号前的所有数据 #p#
 if($today=~/15$/)
 {
 $passdate=$thismonth.'08';
 if($dir<$passdate)
 {
 &deleteDir($targetDir.$dir);
 }
 if($lastmonth=='12')
 {
 $tempstr=substr($dir,0,2);
 if($tempstr=="12")
 {
 &deleteDir($targetDir.$dir);
 }}}
 #每月25号删除本月19号之前的所有数据。
 if($today=~/25$/)
 {
 $passdate=$thismonth.'19';
 if($dir<$passdate)
 {
 &deleteDir($targetDir.$dir);
 }
 if($lastmonth=='12')
 {
 $tempstr=substr($dir,0,2);
 if($tempstr=="12")
 {
 &deleteDir($targetDir.$dir);
 }}}}}
 #递归遍历各目录,遍历各个文件,每个文件先进行chmod777filename操作,再进行rm-rffilename操作。
subdeleteDir($)
 {
 my($dir)=@_;
 print"loginthedir:$dir\n";
 my$handle;
 opendir($handle,$dir);
 while(defined(my$ndir=readdir($handle)))
 {
 if(($ndireq".")||($ndireq".."))
 {
 next;
 }
 $ndir=$dir."/".$ndir;
 if(-f$ndir)
 {
 ls`chmod777$ndir`;##如果需要此步。
 print"file:$ndir\n"ifunlink($ndir);
 }else
 {
 print"Dir:$ndir\n";
 deleteDir($ndir);
 }}
 closedir($handle);
 rmdir($dir);
 print"nowlocate:$dir\n";
 }。本节关于删除SVN备份库介绍完毕。
【编辑推荐】
                分享文章:技术分享:如何删除SVN备份库
                
                链接分享:http://www.csdahua.cn/qtweb/news14/5214.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网