aclが設定されているすべてのファイルを見つけたいです。私はこの汚い解決策を知っています。 acl が設定されているディレクトリ内のすべてのファイルを探します。 /など
sudo ls -lhR /etc|grep +
よりエレガントなソリューションを知っている人はいますか?
答え1
シンプルさとエレガンスは非常に高い基準であり、ソリューション+
にファイル名(C++など)が含まれていると、ダーティソリューションは失敗します。
別の方法は、getfacl
ACLなしでファイルをスキップして再帰的に使用することです。
getfacl -Rs /your/dir | grep "# file:"
これによりファイルが一覧表示され、ファイル名のみがgrepされます。
答え2
そしてsfind
またはfind
内蔵bosh
シェル、それだけです:
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
両方ヒリーツール。
同じことを得るgetfacl
GNUシステムで一般的に見られるコマンド、確立されたエドゥアルドの答え、次のようにファイルフィールド(representationとasを使用していくつかのバイト値をエンコードするgetfacl
)をデコードする必要があります。\ooo
\
\\
getfacl -Rs . | perl -nle '
if (/^# file: (.*)/) {
print $1 =~ s{\\(\\|[0-7]{3})}{
$1 eq "\\" ? "\\" : chr oct $1}ger
}'
find
このファイルのリストで操作を実行するには 's here が使用できないため、-exec
NUL で区切られたリストを印刷する必要があります。
getfacl -Rs . | perl -nl0e '
if (/^# file: (.*)/) {
print $1 =~ s{\\(\\|[0-7]{3})}{
$1 eq "\\" ? "\\" : chr oct $1}ger
}'
したがって、xargs -r0 some-command
(zsh)または(bash 4.4+)を使用してパイプまたは配列に保存できます。array=( ${(0)"$(cmd)"} )
readarray -td '' < <(cmd)