我需要得到Access rights in
更human readable
的文件或文件夹格式与symbolic符号这样u=rwx,g=srwx,o-rwx
(可能粘位)UNIX权限转换器在象征性的符号(包括粘滞位)
- 使用
stat --format '%a'
,我获得结果与格式2770
,八进制格式 - 使用
stat --format '%A'
,我获得具有格式drwxrws---
结果,人类可读
我需要一个命令,获取格式像u=rwx,g=srwx,o-rwx
(与chmod symbolic modes
兼容)
[u|g|o]
:为user
/group
/other
或a
所有[=]
:是理所当然的权利[rwxst]
:授予的权利列表无重要性[-rwx]
:右撤销(如果没有权利授予)
我曾经尝试这样做(但它不能处理所有的情况下,specialy粘位):
stat --format '%A' temp |
sed -E 's/^.(...)(...)(...)/u=\1,g=\2,o=\3/g' | # split by triplet
sed 's/=---/-rwx/g' | # revoker grants
sed 's/rws/srwx/g' | # setgid with x ...
sed 's/--S/s/g' | # setgid without x ...
sed ... nead more transormation... # manage sticky bit setuid setgid
我寻找一个更优雅的方式。
例如输入==>输出
drwxrws---
==>u=rwx,g=srwx,o-rwx
(由d ==>目录开始)drwxrwxrwx
==>u=rwx,g=rwx,o=rwx
或ugo=rwx
或a=rwx
-r-xrw-r--
==>u=rx,g=rw,o=r
(开始 - ==>常规文件)-rwx--S---
==>u=rwx,g=s,o-rwx
(S大写)------s--t
==>u=-srwx,g=sx,o=xt
(粘滞位)
输入格式==>像命令stat
或ls -al
输出格式==>必须与chmod
这个完整的版本似乎作品兼容,但我相信我们可以简化它,(即没有多个sed)
stat --format '%A' a |
sed -E 's/^.(...)(...)(...)/u=\1,g=\2,o=\3/g' | # split by triplet
sed -E 's/s/xs/g' | # setgid ou setuid with x ...
sed -E 's/t/xt/g' | # sticky bit with x ...
sed -E 's/S/s/g' | # setgid ou setuid without x ...
sed -E 's/T/t/g' | # sticky bit alone
sed -E 's/-//g' | # remove -
sed -E 's/=(,|$)/-rwx\1/g' # revoker grants
为什么downvote?请解释。 – Indent
因为你要求别人写你的代码而不费吹灰之力。 – 123
好的,我已经更新了我的临时解决方案(我没有发布这个不影响答案) – Indent