我需要得到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