将“ls -l”输出中的权限转换为八进制

将“ls -l”输出中的权限转换为八进制

我想将 的输出转换ls为八进制权限位。

我想到了实施该练习的最短、最清晰的方法:假设我们有输入:

total 1
drwxr----x 1 user2 workers 1024 May 26 22:22 dir
-rwx-wxrw- 2 user2 workers 1024 May 26 22:22 file.txt

我们的输出应该是:

741 dir
736 file.txt

答案1

你可以使用 GNU find

find . -type f -printf "%m\t%f\n"

为了获取文件的完整路径,请使用指令p而不是f

find . -type f -printf "%m\t%p\n"

为了将结果限制为当前目录,请指定-maxdepth

find . -maxdepth 1 -type f -printf "%m\t%f\n"

如果您想要文件和目录的结果,请删除-type谓词:

find . -printf "%m\t%p\n"

答案2

你不想用ls这个。在 GNU 系统上,您可以使用:

stat -c'%a %n' *

答案3

这可能不是最清晰的代码,但从输出来看很容易理解:

echo drwxr----x | 
awk '{chars=substr($1,2); print chars; gsub("-","0",chars); 
gsub("r","4",chars); gsub("w","2",chars); gsub("x","1",chars); 
print chars; for(i=1;i<10;i++) { sum+=substr(chars,i,1); 
if (i%3 == 0) { printf "%d",sum;sum=0; }; } print ""; }'

rwxr----x
421400001
741

(这里假设只设置了前9位权限)

相关内容