全サブディレクトリのantを実行する
はじめに
眠る猫の頁の作成には,XMLとXSLTを使っている.個々の内容はXMLで記述し,グローバルメニュー等共通部分をXSLTで引っ付けてXHTMLに変換を行っている.変換はantを使っていて,サブディレクトリにbuild.xmlが散在した状態である.通常の更新であれば,量も頻度も多くないので,
- サブディレクトリでファイルを更新
- antで変換
で手間はかからない.しかし,グローバルメニューの変更等,サイト全部のファイルに影響を与えるような変更の場合,手作業では大変だ.全てのサブディレクトリでantを実行するシェルスクリプトを作ろう.
まずは作ってみた
#!/bin/bash
if [ $# -eq 0 ];then
cur="."
else
cur=${1%/} #'dir/'と指定した場合は末尾の'/'を取り'dir'とする.
fi
if [ -e "$cur/build.xml" ];then
pushd "$cur" #ディレクトリが空白を含む場合があるので(My Documents etc)ダブルクォートで囲む
"/cygdrive/c/Progra~1/ant/bin/ant all"
popd
fi
for i in `ls -F $cur | grep '^[^.].*\/$'|sed '/backup/d'`;do
#先頭の文字が'.'以外でディレクトリ(末尾に'/'が付いている).
#backupはバックアップ用なので除外
all.sh $cur/$i
done
pushd/popdが使えない場合
pushd/popdは使えるシェルと使えないシェルがある.使えないシェルの場合は,下記のようにする.
#!/bin/sh
if [ $# -eq 0 ];then
cur="."
else
cur=${1%/} #'dir/'と指定した場合は末尾の'/'を取り'dir'とする.
fi
if [ -e "$cur/build.xml" ];then
ret=`pwd`
cd "$cur"
"/cygdrive/c/Progra~1/ant/bin/ant all"
cd "$ret" #ディレクトリが空白を含む場合があるので(My Documents etc)ダブルクォートで囲む
fi
for i in `ls -F $cur | grep '^[^.].*\/$'|sed '/backup/d'`;do
#先頭の文字が'.'以外でディレクトリ(末尾に'/'が付いている).
#backupはバックアップ用なので除外
all.sh $cur/$i
done