ls -l 出力形式を chmod 形式に変換

ls -l 出力形式を chmod 形式に変換

次のような出力があるとしましょうls -l

drwxr-xr-x 2 root root 4096 Apr  7 17:21 foo

使用された形式に自動変換するにはどうすればよいですかchmod

たとえば、

$ echo drwxr-xr-x | chmod-format
755

私はOS X 10.8.3を使用しています。

ベストアンサー1

一部のシステムにはファイル権限を数値で表示するコマンドがありますが、残念ながら移植可能なものはありません。

zshモジュールにはstat(別名)組み込み関数があります。zstatstat

zmodload zsh/stat
stat -H s some-file

それなら、mode中にあるのはモードな$s[mode]のに、タイプ+パーマです。

8進数で権限を取得するには、次のものが必要です。

perms=$(([##8] s[mode] & 8#7777))

BSD(付属Apple OS/Xstat)にもコマンドがあります。

stat -f %Lp some-file

(いいえL、完了しました。モデル戻り値(8進数で表示)

GNU find(1990年、おそらくそれ以前)は権限を8進数で印刷できます。

find some-file -prune -printf '%m\n'

後で(2001年、zsh stat1997年以降、BSD stat(2002)より前)、GNUstatコマンドは再び別の構文を導入しました。

stat -c %a some-file

これらよりもずっと前に、IRIXにはすでにstatコマンドがありました(すでにアイリックス5.31994)、代替構文を使用します。

stat -qp some-file

同様に、標準コマンドがない場合、移植性のための最良のオプションは次のものを使用することですperl

perl -e 'printf "%o\n", (stat shift)[2]&07777' some-file

おすすめ記事