ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

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