Linux: uma maneira fácil e elegante de encontrar todos os arquivos com o conjunto acl?

Linux: uma maneira fácil e elegante de encontrar todos os arquivos com o conjunto acl?

Quero encontrar todos os arquivos com o conjunto acl. Eu conheço esta solução suja: para encontrar todos os arquivos com acl definido no diretório. /etc

 sudo ls -lhR /etc|grep +

Alguém conhece uma solução mais elegante?

Responder1

Fácil e elegante é um nível bastante alto de alcançar e sua solução suja falhará se você tiver nomes de arquivos +(digamos, c++).

A alternativa é usar getfaclrecursivamente, ignorando arquivos que não possuem ACL

getfacl -Rs /your/dir | grep "# file:"

Isso irá listá-los e o grep mantém apenas os nomes dos arquivos.

Responder2

Comsfindou o findembutido doboshconcha, é apenas:

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.

Ambos sfinde boshsão enviados como parte deFerramentas Schily.

Para obter algo semelhante com ogetfaclcomando normalmente encontrado em sistemas GNU, construindoA resposta de Eduardo, precisaríamos decodificar o campo do arquivo (onde getfaclcodifica alguns valores de bytes com \ooorepresentações e \as \\) com algo como:

getfacl -Rs  . | perl -nle '
  if (/^# file: (.*)/) {
    print $1 =~ s{\\(\\|[0-7]{3})}{
      $1 eq "\\" ? "\\" : chr oct $1}ger
  }'

Para fazer algo com essa lista de arquivos, como não podemos usar findaqui -exec, você desejaria imprimir a lista delimitada por NUL:

getfacl -Rs  . | perl -nl0e '
  if (/^# file: (.*)/) {
    print $1 =~ s{\\(\\|[0-7]{3})}{
      $1 eq "\\" ? "\\" : chr oct $1}ger
  }'

Assim, você pode, por exemplo, canalizá-lo xargs -r0 some-commandou armazená-lo em um array com array=( ${(0)"$(cmd)"} )(zsh) ou readarray -td '' < <(cmd)(bash 4.4+).

informação relacionada