パーミッションを数値で取得するにはlsではなくstatを使う

 既存の環境のコピーを別なOSに作る必要があったので、lsの結果をベースにmkdir, chmod, chwonを生成するシェルを作って見ることに。

しかし、いきなり挫折。というのもls -lの結果は通常下記の通り

% ls -l /var/
合計 12
drwxr-xr-x 1 root root 134  3月  2 23:42 cache
drwxr-xr-x 1 root root  14  3月  5 02:28 db
drwxr-xr-x 1 root root  64  4月  3  2012 empty
drwxr-xr-x 1 root root 282  5月 27  2012 lib

これだとパーミッションを直接chmodに食わせることができない... なにか良い方法は無いかと考えていたところ。

>@Mozk_  

@koduki stat(1)でいけません?

と教えてもらう。という訳でその線で調べてみたらビンゴ! 下記コマンドでちゃんと755とか数値でとれました。

% stat --format='%a %U:%G' /var/*
755 root:root
755 root:root
755 root:root
755 root:root

ディレクトリ名はフルパスで欲しかったのでfindと組み合わせてみた

% find /usr/lib/ruby/1.9.1/test/ -type d|awk '{print "echo \"`stat --format=_q_%a %U:%G_q_ "$1"` "$1"\""}'|sed "s/_q_/'/g"|sh |head
755 root:root /usr/lib/ruby/1.9.1/test/
755 root:root /usr/lib/ruby/1.9.1/test/unit

これで必要なパラメータはとれたので、後はawkとかでコマンド生成するだけ。簡単な環境構築には便利かも。

 

では、Happy Hacking!