Permissions

將 ls -l 輸出格式轉換為 chmod 格式

  • May 15, 2021

假設我有以下輸出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(aka zstat) 內置stat

zmodload zsh/stat
stat -H s some-file

然後,modeis 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 年)但早於 BSD stat(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

引用自:https://unix.stackexchange.com/questions/71585