ミッションたぶんPossible

どこにでもいるシステムエンジニアのなんでもない日記です。たぶん。

Linuxでディレクトリを移動するごとに一時停止しながらコマンドを実行するシェルスクリプト

 例によって仕事で必要になったので、備忘録的にメモメモ。


 前回のコマンド実行をディレクトリごとにやりたいんだけど、いちいちディレクトリを移動するの面倒だし、シェルスクリプトでできないかなぁと思って書いてみました。

ary1=(`ls -l | sed -e 's/\s\{1,\}/ /g' -ne '/^d/p ' | cut -d' ' -f9 | column -x`)

for dir in ${ary1[@]}; do
cd $dir
dir_name=`pwd 2>&1`

echo 'Exec in ['$dir_name'] directory. Please Enter key.'
read Wait

(※ 実行したいコマンドを何かしら書く)
cd ..
done


 sedは指定の文字列を別の文字列に置換するコマンドです。上記では2つ以上の半角空白を1文字の半角空白に置換しています。cutコマンドでデリミタに半角空白を指定し、lsコマンドの9番目の領域……つまり、ファイル・ディレクトリ名のみを切り取って取得します。


 あとはfor文でディレクトリの数だけぶん回して指定のコマンドを実行します。readコマンドで都度処理を止めて、Enterキーで確認するようにしていますが、これは頻繁にやるといちいち操作者が動かさなくちゃいけなくてめんどくさいので、不要であれば外した方がいいと思います。(今回は要件にあったので面倒は承知の上で入れました)


 上記を書くにあたり、今回参考にした記事は以下。詳しい解説はこちらを読んだ方がよろしいかと思います。