旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

svnリポジトリ群を全部dumpしてtar.gz化するシェルスクリプト

2008年3月14日

svnadmin dump はひとつのリポジトリに対してしか出来ないので
リポジトリが増えてくるとバックアップが面倒になる。

・・・ので、特定ディレクトリ以下のリポジトリを
全部dumpしてtar.gzで固めるシェルスクリプトを書いた。

#!/bin/sh
#
# SVNリポジトリ群を保存する
#
# svnadmin dump は1リポジトリに対してしか出来ないので
# それを特定ディレクトリ以下全てのリポジトリに対して行うのが基本機能
#

#---------------
# 設定値
#
# *ディレクトリを指定する際は、末尾に"/"を付けること
#---------------
# svnadminコマンドへのパス
SVNADMIN_CMD='svnadmin'
# リポジトリ群ディレクトリへの絶対パス
REPOS_DIR='/var/repos/'
# バックアップファイル保存先ディレクトリへの絶対パス
OUTPUT_DIR='/tmp/'
# バックアップファイル名
OUTPUT_FILENAME='svn_repos_backup_'`date '+%Y%m%d_%H%M%S'`
# 作業用一時出力ディレクトリへの絶対パス
TMP_DIR='/tmp/__svn_repos_backuper__/'

#---------------
# 処理
#---------------
echo "... start processing."
# 全リポジトリへ svnadmin load
mkdir -p $TMP_DIR$OUTPUT_FILENAME
for i in `ls $REPOS_DIR`
do
    echo "... start dumping. $REPOS_DIR$i"
    `$SVNADMIN_CMD dump $REPOS_DIR$i > $TMP_DIR$OUTPUT_FILENAME/$i'.dat'`
    echo "... complete dumping. $REPOS_DIR$i"
done
# ファイルを圧縮
echo "... start compression."
keeping_cd=`pwd`
cd $TMP_DIR
tar zcf $OUTPUT_DIR$OUTPUT_FILENAME.tar.gz ./$OUTPUT_FILENAME
cd $keeping_cd
echo "... complete compression."
# 一時ファイルを削除
rm $TMP_DIR$OUTPUT_FILENAME/*.dat
echo "... complete processing."

これでA環境で固めたリポジトリ群を
B環境で解凍してsvnadmin load して
C環境からチェックアウト出来た

・・・という、動作確認は出来たので、ヨシとしました

作ろう作ろうと思って半年経ってしまった。
簡単なスクリプトなんだから、ストレスを感じるぐらいならサッサと作りゃいいのになぁ