将ls -l输出格式转换为chmod格式

Modified on: Sat, 30 Jun 2018 05:07:30 +0800

说我有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。

最佳答案

某些系统有命令将文件的权限显示为数字,但遗憾的是,没有任何便携信息。

zshstat模块中内置了zstat(又名stat):

zmodload zsh/stat
stat -H s some-file

然后,mode$s[mode]中,但是模式,即类型+ perms。

如果您想要以八进制表示的权限,则需要:

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

BSD(包括Apple OS / X)也有stat命令。

mode=$(stat -f %p some-file)
perm=$(printf %o "$((mode & 07777))"

GNU find(从1990年开始,可能在之前)可以将权限打印为八进制:

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

后来(2001年,很长时间zsh stat(1997)但在BSD stat(2002)之前)GNU stat

stat -c %a some-file

很久以前,IRIX已经有了stat命令(已经在IRIX 5.3(1994))另一种语法:

stat -qp some-file

同样,当没有标准命令时,便携性的最佳选择是使用perl

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

相关问答

添加新评论