• このエントリーをはてなブックマークに追加

【linux豆知識】whileを使って複数ディレクトリに対して繰り返し処理

  • このエントリーをはてなブックマークに追加

linux
zaco muraです。

運用者であれば必ず繰り返し処理を行う場面があると思います。サーバエンジニアになりたての頃は繰り返し処理が出てきたらすぐにシェルスクリプトにしていましたが、いちいちそんなのはめんどくさい。ということでシェルスクリプトに書かずにコマンドライン上でやるようになったのですが、その中でこれは便利だぞと思う使い方を書いてみました。

前提

OS : CentOS6
シェル : bash

使うコマンド

簡単なコマンドでできます。

・while
・read
・ls

やり方

例として/var/log/配下にIPアドレス毎のディレクトリがあるとします。
/var/log/192.168.0.1/
/var/log/192.168.0.2/
…….
/var/log/172.16.0.1/
/var/log/172.16.0.2/
…….
/var/log/10.0.0.1/
/var/log/10.0.0.2/

それぞれのディレクトリ配下にtest.txtというファイルがあり、その中にそれぞれのIPアドレスを記述したいとします。

これをコマンドライン上で、ワンライナーで実行します。

[zacomura@zacodesign log]$ ls -1 | while read DIR;do echo "directory is ${DIR}" >> ${DIR}/test.txt ; done
[zacomura@zacodesign log]$ cat 192.168.0.1/test.txt 
directory is 192.168.0.1
[zacomura@zacodesign log]$ cat 192.168.0.2/test.txt 
directory is 192.168.0.2

できました。まぁこんなことをする状況というのはなかなか無いですが、いろいろなことに応用はできると思います。

コマンドの解説

それぞれのコマンドの解説をしていきます。

ls -1
  →lsの表示結果からディレクトリ情報を取り除きます(/で区切られた最後の文字列のみ出力する)

while read DIR
  →文字列を読み込み、DIRという変数に格納します。
   ここではls -1の出力結果(=192.168.0.1などのディレクトリ情報)をパイプで受け取ります。

do ; done
  →whileの開始と終了です。

まとめ

ということで、whileを使ったワンライナーでした。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link