我想将 的输出转换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位权限)