Linuxでlsの実行結果をawkで取得する方法
ls -l
などで特定のファイルやディレクトリの所有者やグループなどを取得したいときがあります。
たとえば、rbenv
ディレクトリをls -ld
すると、次のように表示されます。
$ ls -ld /usr/local/rbenv
drwxrwxr-x 10 root rbenv 4096 12月 14 17:40 2013 /usr/local/rbenv/
で、たとえば外部のプログラムから「グループがrbenv
なのかどうかしりたい!」という状況を考えます。
上の例だと、たとえばgrep rbenv
しても、パスの方が引っかかるため、ただしく取得できません。
このやり方について書いてみます。
特定のカラムを取得する
グループなど、特定のカラムを取得する方法として、awk
をつかう方法があります。
以下は、ls
した結果の4番目(グループ)を取得する例です。
$ ls -ld /usr/local/rbenv | awk '{ print $4 }'
この実行結果はrbenv
となります。
グループが特定のものかどうか判断する
上の例で、rbenv
だったらそれを返し、違ったら空を返す、という例を以下に示します。
これは上を単にgrep
すればよいです。
$ ls -ld /usr/local/rbenv | awk '{ print $4 }' | grep rbenv
Chef SoloでExecute Resourceをつかうときのnot_if
などでこれが結構役に立ってきます。
このやり方がうまいやり方かどうか正直分かりませんがOnz