全サブディレクトリの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