Linux:acl設定ですべてのファイルを見つける簡単でエレガントな方法は何ですか?

Linux:acl設定ですべてのファイルを見つける簡単でエレガントな方法は何ですか?

aclが設定されているすべてのファイルを見つけたいです。私はこの汚い解決策を知っています。 acl が設定されているディレクトリ内のすべてのファイルを探します。 /など

 sudo ls -lhR /etc|grep +

よりエレガントなソリューションを知っている人はいますか?

答え1

シンプルさとエレガンスは非常に高い基準であり、ソリューション+にファイル名(C++など)が含まれていると、ダーティソリューションは失敗します。

別の方法は、getfaclACLなしでファイルをスキップして再帰的に使用することです。

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両方ヒリーツール

同じことを得るgetfaclGNUシステムで一般的に見られるコマンド、確立されたエドゥアルドの答え、次のようにファイルフィールド(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 が使用できないため、-execNUL で区切られたリストを印刷する必要があります。

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)

関連情報