全サブディレクトリのantを実行する

はじめに

眠る猫の頁の作成には,XMLとXSLTを使っている.個々の内容はXMLで記述し,グローバルメニュー等共通部分をXSLTで引っ付けてXHTMLに変換を行っている.変換はantを使っていて,サブディレクトリにbuild.xmlが散在した状態である.通常の更新であれば,量も頻度も多くないので,

  1. サブディレクトリでファイルを更新
  2. 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