
現在の作業ディレクトリの各サブディレクトリ内で実行したいコマンドが以下にあります。コマンドは次のとおりです。
OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..
このディレクトリには 700 を超えるフォルダがあり、各フォルダに移動して 4 つのコマンドを実行し、次に次のフォルダに移動してコマンドを実行し、これを繰り返すようにしたいと考えています。このサイトのいくつかのサンプルを自分のコマンドと組み合わせてみましたが、うまくいきません。
答え1
脚本
for DIR in *; do
[ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done
一発ギャグ
for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done
使い方
Bash は
*
現在のディレクトリ内のすべてのファイルとディレクトリに展開します。for DIR in *; do ... done
これらを調べて...
それぞれを実行します。いずれの場合も、
$DIR
現在のエントリの名前が保持されます。[ -d "$DIR" ] && ...
$DIR
実際にディレクトリであるかどうか(ファイルではないかどうか)を確認します。そうであれば
...
実行されます。cat "$DIR"/*.xml > "$DIR.xml"
4 行のコードが行うこととまったく同じことを実行します。