Skip to content

Instantly share code, notes, and snippets.

@bg5sbk
Last active December 30, 2015 16:19
Show Gist options
  • Save bg5sbk/7854394 to your computer and use it in GitHub Desktop.
Save bg5sbk/7854394 to your computer and use it in GitHub Desktop.
A Subversion full or differential backup script.
#!/bin/bash
if [ $# != 3 ]; then
echo "This script backup all of SVN repositories under the [svn root] directory, to the [backup root] directory."
echo "usage: svn-backup ['full'|'part'] [svn root] [backup root]"
echo "example: svn-backup full /opt/svn-repos /opt/svn-backup"
exit
fi
mode=$1
svn_root=$2
backup_root=$3
for project in `ls -F $svn_root | grep /$ | sed 's/\///g'`
do
project_dir="$svn_root/$project"
backup_dir="$backup_root/$project"
pri_backup_dir="$backup_root/$project.old"
backup_info="$project_dir/backup_info"
last_version=`svnlook youngest $project_dir`
if [ ! -f $backup_info ]; then
echo 0 > $backup_info
fi
last_backup_version=`cat $backup_info`
if [ $mode != 'full' ] && [ $last_backup_version == $last_version ]; then
echo "`date +"%F %R:%S"` '$project' nothing to do"
else
if [ $mode == 'full' ] || [ $last_backup_version == '0' ] || [ ! -d $backup_dir ]; then
echo "`date +"%F %R:%S"` '$project' full backup"
if [ -d $pri_backup_dir ]; then
rm -rf $pri_backup_dir
fi
if [ -d $backup_dir ]; then
mv $backup_dir "$pri_backup_dir"
fi
svnadmin hotcopy $project_dir $backup_dir
last_version=`svnlook youngest $backup_dir`
else
last_backup_version=$((last_backup_version + 1))
echo "`date +"%F %R:%S"` '$project' version $last_backup_version to $last_version"
backup_file="$backup_dir/v$last_backup_version-$last_version.bk"
svnadmin dump --incremental -q -r $last_backup_version:$last_version $project_dir > $backup_file
fi
echo $last_version > $backup_info
fi
done
echo "`date +"%F %R:%S"` done"
echo ""
@bg5sbk
Copy link
Author

bg5sbk commented Dec 8, 2013

Use this script with crontab. Full backup at 5 AM. Differential backup every one hour in 09:00 ~ 23:00.

0 5 * * * /opt/svn-repos/svn-backup full /opt/svn-repos /home/lms/svn-backup >> /opt/svn-repos/svn-backup.log
0 9-23/1 * * * /opt/svn-repos/svn-backup part /opt/svn-repos /home/lms/svn-backup >> /opt/svn-repos/svn-backup.log

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment