Permissions
將 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。
一些系統具有將文件權限顯示為數字的命令,但不幸的是,沒有可移植性。
zsh
在模組中有一個stat
(akazstat
) 內置stat
:zmodload zsh/stat stat -H s some-file
然後,
mode
is in$s[mode]
but是模式,即type + perms。如果您想要以八進製表示的權限,您需要:
perms=$(([##8] s[mode] & 8#7777))
BSD(包括Apple OS/X)也有一個
stat
命令。stat -f %Lp some-file
(沒有
L
,返回完整模式,以八進製表示)GNU find(早在 1990 年甚至更早)可以將權限列印為八進制:
find some-file -prune -printf '%m\n'
後來(2001 年,早於
zsh
stat
(1997 年)但早於 BSDstat
(2002 年))引入了 GNUstat
命令,其語法再次不同:stat -c %a some-file
早在這些之前,IRIX 已經有一個
stat
命令(在 1994 年的IRIX 5.3中已經存在),它具有另一種語法:stat -qp some-file
同樣,當沒有標準命令時,可移植性的最佳選擇是使用
perl
:perl -e 'printf "%o\n", (stat shift)[2]&07777' some-file