Unix列表命令“ls”可以输出数字的chmod权限吗?

当列出一个目录来查看数字unix权限(如644)而不是符号输出时是否有可能执行-rw-rw -r–

谢谢。

它几乎可以..

ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \ *2^(8-i));if(k)printf("%0o ",k);print}' 

最近我可以想到(保持简单)是stat ,假设你知道你正在寻找哪些文件。 如果你不这样做, *可以find其中的大部分:

 /usr/bin$ stat -c '%a %n' * 755 [ 755 a2p 755 a2ps 755 aclocal ... 

它处理粘性,suid和公司开箱:

 $ stat -c '%a %n' /tmp /usr/bin/sudo 1777 /tmp 4755 /usr/bin/sudo 

你可以使用GNU find。

 find . -printf "%m:%f\n" 

您可以使用以下命令

 stat -c "%a %n" * 

也可以使用任何filenamedirectoryname filename而不是*来获得特定的结果。

在Mac上,您可以使用

 stat -f '%A %N' * 

@ MYYN

哇,好awk! 但是,怎么样,撒旦和粘性?

你必须用s和t扩展你的filter,否则它们将不会被计数,而你得到错误的结果。 为了计算这个特殊标志的八进制数,过程是相同的,但索引是在4 7和10处。设置了执行位的文件的可能标志是---s--s--t amd执行位集是---S--S--T

 ls -l | awk '{ k = 0 s = 0 for( i = 0; i <= 8; i++ ) { k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) ) } j = 4 for( i = 4; i <= 10; i += 3 ) { s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j ) j/=2 } if ( k ) { printf( "%0o%0o ", s, k ) } print }' 

testing:

 touch blah chmod 7444 blah 

将导致:

 7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah 

 touch blah chmod 7555 blah 

会给:

 7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah 

您不要使用ls来获取文件的权限信息。 你使用stat命令。 它会给你你想要的数值。 “Unix方式”说,你应该使用ls(或“echo *”)和stat来创build自己的脚本,以及其他任何你喜欢用你想要的格式来提供信息的脚本。

不,它只能打印商品的uid / guid。

根据所选的答案和使用别名的build议 ,我将其转换为函数,以便将目录传递给列表是可能的。

 # ls, with chmod-like permissions and more. # @param $1 The directory to ls function lls { LLS_PATH=$1 ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \ *2^(8-i));if(k)printf(\"%0o \",k);print}" }