Acl
Linux:使用 acl 集查找所有文件的簡單而優雅的方法?
我想找到所有帶有 acl 集的文件。我知道這個骯髒的解決方案:查找所有在 dir 中設置了 acl 的文件。/ETC
sudo ls -lhR /etc|grep +
有人知道更優雅的解決方案嗎?
簡單而優雅是一個很高的標準,如果你有文件名
+
(比如 c++),你的骯髒解決方案就會失敗。另一種方法是
getfacl
遞歸使用,跳過沒有 ACL 的文件getfacl -Rs /your/dir | grep "# file:"
這將列出它們,而 grep 只保留文件名。
sfind . -acl
bosh -c 'find . -acl'
-acl The primary evaluates as true if the file has addi- tional ACLs defined. On platforms that do not support ACLs or where sfind does not yet support ACLs, the pri- mary always evaluates as false. Currently only Solaris, Linux and FreeBSD is supported.
兩者
sfind
都bosh
作為Schily-Tools的一部分提供。
getfacl
為了獲得與GNU 系統上常見的命令類似的東西,建立在Eduardo 的答案之上,我們需要解碼文件欄位(其中用表示和asgetfacl
編碼一些字節值),如下所示:\ooo``\``\\
getfacl -Rs . | perl -nle ' if (/^# file: (.*)/) { print $1 =~ s{\\(\\|[0-7]{3})}{ $1 eq "\\" ? "\\" : chr oct $1}ger }'
要處理該文件列表,因為我們不能在此處使用
find
’-exec
,您需要列印 NUL 分隔的列表:getfacl -Rs . | perl -nl0e ' if (/^# file: (.*)/) { print $1 =~ s{\\(\\|[0-7]{3})}{ $1 eq "\\" ? "\\" : chr oct $1}ger }'
因此,您可以使用(zsh) 或(bash 4.4+)將其通過管道傳輸
xargs -r0 some-command
或儲存在數組中。array=( ${(0)"$(cmd)"} )``readarray -td '' < <(cmd)