来自 http://blog.sina.com.cn/s/blog_5eb1a2670100rr94.html
windows下增量备份脚本,参考了网友的作品,请按照实际需要进行修改。
svndump.bat
echo off
rem Subversion的安装目录及执行文件
set SVN_HOME="C:\Program Files\Subversion\bin"
set SVN_ADMIN=%SVN_HOME%\svnadmin.exe
set SVN_LOOK=%SVN_HOME%\svnlook.exe
rem 配置库仓库根目录
set SVN_REPOROOT=D:\svn
rem 压缩命令
set RAR_CMD="C:\Program Files\WinRAR"
rem 增量备份文件存放路径
set RAR_STORE="D:\svn_increment_backup"
rem
日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录
set Log_PATH=D:\svn_back_scripts\increment
rem 读取项目库列表文件,并忽略其中;开头的行
FOR /f "eol=;" %%C IN (projectlist.conf) DO call D:\svn_back_scripts\increment\dump.bat %%C
dump.bat
@ECHO OFF
rem 调用格式:dump 项目库名
if "%1"=="" goto no_args
set PROJECT=%1
if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%
cd %RAR_STORE%\%PROJECT%
SET LOWER=0
SET UPPER=0
if not exist %Log_PATH%\%PROJECT% mkdir %Log_PATH%\%PROJECT%
@echo 项目库%PROJECT%开始备份>> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP
@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D
if %UPPER%==0 GOTO :N_EXIT
if not exist %Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt GOTO :BAKUP
rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
@FOR /f %%C IN (%Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt) DO @set LOWER=%%C
@set /A LOWER=%LOWER%+1
rem 不需要备份,则跳转结束
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
:BAKUP
SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp
rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %
rem 准备写备份日志信息
IF %LOWER% gtr 0 GOTO :WRITENOTE
@ECHO %PROJECT%备份时间: �te% >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@echo %PROJECT%备份revision区间 从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
GOTO :COMPLETE
:WRITENOTE
@ECHO �te% >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@echo -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
:COMPLETE
rem 下面一行用于拷贝备份文件到目标地址
@echo 将dump备份文件%FILENAME%.dmp 转移至%RAR_STORE%\%PROJECT% 目录下 >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\
del %Log_PATH%\A.TMP
@echo %UPPER% > %Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt
:N_EXIT
@echo 项目库%PROJECT%处理结束!>> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@CD..
@exit /B
:no_args
@ECHO ON
@echo "请正确使用svnadmin dump命令: dump 项目库名"
windows下全量备份脚本,参考了网友的作品,请按照实际需要进行修改。
fullbackup.bat
echo off
rem Subversion的安装目录
set SVN_HOME="C:\Program Files\Subversion\bin"
rem 所有版本库的父目录
set SVN_ROOT=D:\svn
rem 备份的目录
set BACKUP_SVN_ROOT=D:\svn_full_backup
set BACKUP_DIRECTORY=�CKUP_SVN_ROOT%\�te:~0,10%
if exist �CKUP_DIRECTORY% goto checkBack
echo 建立备份目录�CKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log
mkdir �CKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nI
mkdir �CKUP_DIRECTORY%\conf
xcopy %SVN_ROOT%\conf �CKUP_DIRECTORY%\conf
goto end
:checkBack
echo 备份目录�CKUP_DIRECTORY%已经存在,请清空。
goto end
:end
hotcopy.bat
@echo 正在备份版本库%1……
@%SVN_HOME%\svnadmin hotcopy %1 �CKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!
#!/bin/sh
##Subversion的安装目录及执行文件
SVN_HOME=/data/csvn/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook
##配置库根目录
SVN_REPOROOT=/data/forallsoft
##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=/data/svnbackup/incremental/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi
##日志存放目录
Log_PATH=/data/svnbackup/log
if [ ! -d "$Log_PATH" ];then
mkdir -p $Log_PATH
fi
##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls)
do
if [ ! -d "$RAR_STORE/$name" ];then
mkdir $RAR_STORE/$name
fi
cd $RAR_STORE/$name
if [ ! -d "$Log_PATH/$name" ];then
mkdir $Log_PATH/$name
fi
echo ******Starting backup from $date****** >> $Log_PATH/$name/$name.log
echo ******svn repository $name startting to backup****** >> $Log_PATH/$name/$name.log
$SVN_LOOK youngest $SVN_REPOROOT/$name > $Log_PATH/A.TMP
UPPER=`head -1 $Log_PATH/A.TMP`
##取出上次备份后的版本号,并做+1处理
NUM_LOWER=`head -1 $Log_PATH/$name/last_revision.txt`
let LOWER="$NUM_LOWER+1"
##开始做增量备份并记录$UPPER,为下次备份做准备
$SVN_ADMIN dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_STORE/$name/$LOWER-$UPPER.dump
rm -f $Log_PATH/A.TMP
echo $UPPER > $Log_PATH/$name/last_revision.txt
echo ******This time we bakcup from $LOWER to $UPPER****** >> $Log_PATH/$name/$name.log
echo ******Back up ended****** >> $Log_PATH/$name/$name.log
done
Linux下的全量备份脚本,请按实际需要进行相应的修改
#!/bin/sh
##Subversion的安装目录及执行文件
SVN_HOME=/data/csvn/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook
##配置库根目录
SVN_REPOROOT=/data/forallsoft
##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=/data/svnbackup/full/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi
##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls)
do
##开始做全量备份
$SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name
done