技术分享:如何删除SVN备份库

开发 项目管理
在学习SVN的过程中,你可能会遇到删除SVN备份库方面的问题,本文就向大家介绍一下删除SVN备份库的方法,希望通过本文的介绍大家能够掌握其方法。

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

删除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备份库介绍完毕。

【编辑推荐】

  1. Lniux和Windows下如何删除SVN版本信息?
  2. 如何删除SVN及其恢复问题名师指点
  3. 删除SVN版本信息行之有效的办法
  4. SVN基本操作之新手上路
  5. 跟踪报道SVN客户端常用命令 

 

 

责任编辑:佚名 来源: it168.com
相关推荐

2010-06-02 16:09:05

SVN协议

2010-05-26 15:39:36

SVN服务

2010-05-26 14:53:28

SVN版本库自动备份

2010-05-25 14:54:18

2010-05-28 12:55:23

2010-05-26 15:07:36

SVN版本库自动备份

2010-05-26 18:32:07

SVN库

2010-06-02 16:32:28

SVN代码管理

2010-05-31 18:20:25

配置SVN访问

2010-05-26 18:43:42

SVN库

2010-05-31 13:11:45

MyEclipse下S

2010-06-01 15:41:09

创建SVN仓库

2010-05-25 11:24:30

SVN安装配置

2010-05-31 20:07:31

SVN版本控制插件

2010-05-24 14:00:43

Flex Svn

2010-05-27 14:59:30

配置SVN1.4

2010-06-01 19:06:27

删除SVN

2010-05-28 18:53:36

配置SVN1.4.5

2010-06-01 18:26:11

删除SVN

2017-10-12 08:48:49

Backup Exec备份软件
点赞
收藏

51CTO技术栈公众号