将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。

斯蒂芬·查泽拉斯(Stephane Chazelas)

某些系统具有将文件的权限显示为数字的命令,但不幸的是,这些文件不可移植。

zsh模块中内置stat(aka zstatstat

zmodload zsh/stat
stat -H s some-file

然后,处于mode$s[mode]但处于模式,即类型+烫发。

如果要使用八进制表示的权限,则需要:

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年)之前stat,又引入了GNU命令,其语法也不同:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章