各サブディレクトリでコマンドセットを実行する

各サブディレクトリでコマンドセットを実行する

現在の作業ディレクトリの各サブディレクトリ内で実行したいコマンドが以下にあります。コマンドは次のとおりです。

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 行のコードが行うこととまったく同じことを実行します。

関連情報