シェルスクリプト:「.svn」ディレクトリを一括削除する
【概要】
Subversionでリビジョン管理した場合,管理下の各ディレクトリに「.svn」ディレクトリが作られます。
今回は,この「.svn」ディレクトリを一括削除するシェルスクリプトを書いてみます。
このスクリプトの用途としては,ソースコードがSubversionの管理下にあるサーブレットを本番環境にデプロイしたときに,一緒に本番環境にデプロイされてしまう「.svn」ディレクトリを後から削除するのに使えるかと思います。
【仕様】
このスクリプトの使用方法を以下のように定めます。
1)スクリプトの引数に指定したディレクトリ以下の「.svn」ディレクトリを探して,これを削除する。
2)スクリプトを引数なしで実行した場合,ディレクトリ指定はカレントディレクトリが指定されたものとする。
3)引数がディレクトリでなければ,エラーを出力して終了する。
【実装】
このスクリプトの実装は下記になります。下記スクリプトの後に,このスクリプトの詳細について解説しています。
#!/bin/bash
ARGUMENT=$1 if [ -z $ARGUMENT ] ; then if [ ! -d $ARGUMENT ] ; then FILES=(`find $ARGUMENT -name .svn -print`) if [ $COUNT -gt 0 ]; then sudo rm -rfv $SVNPATH |
【解説】
上記スクリプトの各部分について解説します。
ARGUMENT=$1 if [ -z $ARGUMENT ] ; then ARGUMENT=$PWD fi |
次のif文では,ARGUMENTが空かどうかを判定して,空であれば環境変数$PWDをARGUMENTとしています。
環境変数$PWDはカレントディレクトリのパスが設定されています。
if [ ! -d $ARGUMENT ] ; then echo "rmsvn ERROR: not a directory." exit 1 fi |
注)ここで条件を「-f」とすると,存在しない名前が指定されたときにエラーになりません。
FILES=(`find $ARGUMENT -name .svn -print`) COUNT=${#FILES[*]} |
これをカッコで括ることで,コマンドの結果を配列にすることができます。
ここではfindコマンドを実行して,結果を配列にして変数FILESにセットしています。
また,配列FILESの要素数をCOUNTにセットしています。
if [ $COUNT -gt 0 ]; then … fi |
for i in `seq $COUNT` do SVNPATH=${FILES[$i-1]} … done |
ここで,「seq」は1から引数の数値までカウントアップするコマンドですが,BSD系UNIX(Mac OS Xなど)にはこのコマンドがないため,代わりに「jot」コマンドを使います。
for i in `jot $COUNT` do SVNPATH=${FILES[$i-1]} … done |
sudo rm -rfv $SVNPATH |
【著作権表記】上記コードを含む本ブログのプログラムコードは,私的利用可,商用利用可,改変しての利用可です。利用の際に作者に許諾を得る必要はありません。
■関連書籍をAmazonで検索:[シェルスクリプト]
●プロフェショナル・シェルプログラミング (アスキー書籍) Kindle版
←この記事が役に立ったという方はクリックお願いします。
| 固定リンク
「プログラミング」カテゴリの記事
- シェルスクリプト:「.svn」ディレクトリを一括削除する(2015.03.23)
- JavaScript:excanvasを使ってWebページに画像を表示する(2012.05.07)
- C言語:TRUEとFALSEの値(2012.05.06)
- Java:CSVパーサを作る(その3) - RFC4180対応 後編(2008.06.13)
- Java:CSVパーサを作る(その2) - RFC4180対応 前編(2008.06.12)