« Java:前回作成したコードの処理速度を比較する | トップページ | Java:例外が起こったときに実行されるコードとされないコード »

シェルスクリプト:「.svn」ディレクトリを一括削除する

【概要】
Subversionでリビジョン管理した場合,管理下の各ディレクトリに「.svn」ディレクトリが作られます。
今回は,この「.svn」ディレクトリを一括削除するシェルスクリプトを書いてみます。
このスクリプトの用途としては,ソースコードがSubversionの管理下にあるサーブレットを本番環境にデプロイしたときに,一緒に本番環境にデプロイされてしまう「.svn」ディレクトリを後から削除するのに使えるかと思います。

【仕様】
このスクリプトの使用方法を以下のように定めます。
1)スクリプトの引数に指定したディレクトリ以下の「.svn」ディレクトリを探して,これを削除する。
2)スクリプトを引数なしで実行した場合,ディレクトリ指定はカレントディレクトリが指定されたものとする。
3)引数がディレクトリでなければ,エラーを出力して終了する。

【実装】
このスクリプトの実装は下記になります。下記スクリプトの後に,このスクリプトの詳細について解説しています。

#!/bin/bash

ARGUMENT=$1

if [ -z $ARGUMENT ] ; then
  ARGUMENT=$PWD
fi
echo "rmsvn Path: $ARGUMENT"

if [ ! -d $ARGUMENT ] ; then
  echo "rmsvn ERROR: not a directory."
  exit 1
fi

FILES=(`find $ARGUMENT -name .svn -print`)
COUNT=${#FILES[*]}

if [ $COUNT -gt 0 ]; then
  for i in `seq $COUNT`
  do
    SVNPATH=${FILES[$i-1]}

    sudo rm -rfv $SVNPATH
  done
fi

※上記コードでは,整形のため空白部分は全角スペースを使用しています。

【解説】
上記スクリプトの各部分について解説します。

ARGUMENT=$1
if [ -z $ARGUMENT ] ; then
  ARGUMENT=$PWD
fi
$1がスクリプトの引数で,これを変数ARGUMENTに代入して,以降はARGUMENTを引数として扱っています。
次のif文では,ARGUMENTが空かどうかを判定して,空であれば環境変数$PWDをARGUMENTとしています。
環境変数$PWDはカレントディレクトリのパスが設定されています。

if [ ! -d $ARGUMENT ] ; then
  echo "rmsvn ERROR: not a directory."
  exit 1
fi
このif文ではARGUMENTがディレクトリか判定して,そうでなければスクリプトを終了しています。
注)ここで条件を「-f」とすると,存在しない名前が指定されたときにエラーになりません。

FILES=(`find $ARGUMENT -name .svn -print`)
COUNT=${#FILES[*]}
コマンドをバッククオート「`」で囲むと,囲んだターミナルコマンドが実行されて,コマンドが出力した標準出力が結果になります。
これをカッコで括ることで,コマンドの結果を配列にすることができます。
ここではfindコマンドを実行して,結果を配列にして変数FILESにセットしています。
また,配列FILESの要素数をCOUNTにセットしています。

if [ $COUNT -gt 0 ]; then
 …
fi
このif文は,要素数が0以上か(削除する要素が存在するかどうか)チェックしています。

for i in `seq $COUNT`
do
  SVNPATH=${FILES[$i-1]}
 …
done
FILESから要素を1つづつ取り出して変数SVNPATHへ代入しています。
ここで,「seq」は1から引数の数値までカウントアップするコマンドですが,BSD系UNIX(Mac OS Xなど)にはこのコマンドがないため,代わりに「jot」コマンドを使います。
for i in `jot $COUNT`
do
  SVNPATH=${FILES[$i-1]}
 …
done
BSD(Mac OS X)では上記のようなコードになります。

sudo rm -rfv $SVNPATH
取り出した要素を削除します。

【著作権表記】上記コードを含む本ブログのプログラムコードは,私的利用可,商用利用可,改変しての利用可です。利用の際に作者に許諾を得る必要はありません。

■関連書籍をAmazonで検索:[シェルスクリプト]
プロフェショナル・シェルプログラミング (アスキー書籍) Kindle版

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ プログラム・プログラマへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


ボーズ・オンラインストア

|

« Java:前回作成したコードの処理速度を比較する | トップページ | Java:例外が起こったときに実行されるコードとされないコード »

プログラミング」カテゴリの記事

トラックバック


この記事へのトラックバック一覧です: シェルスクリプト:「.svn」ディレクトリを一括削除する:

« Java:前回作成したコードの処理速度を比較する | トップページ | Java:例外が起こったときに実行されるコードとされないコード »