Linux: ¿una forma fácil y elegante de encontrar todos los archivos con ACL configurado?

Linux: ¿una forma fácil y elegante de encontrar todos los archivos con ACL configurado?

Quiero encontrar todos los archivos con acl configurado. Conozco esta sucia solución: buscar todos los archivos con acl configurado en el directorio. /etc

 sudo ls -lhR /etc|grep +

¿Alguien conoce una solución más elegante?

Respuesta1

Fácil y elegante es un listón bastante alto de alcanzar y su solución sucia falla si tiene nombres de archivos +(digamos c++).

La alternativa es usar getfaclrecursivamente, omitiendo archivos que no tienen ACL.

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

Eso los enumerará y grep conserva solo los nombres de los archivos.

Respuesta2

Consfindo el findincorporado delboshcáscara, es solo:

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 sfindy boshse envían como parte deHerramientas Schily.

Para conseguir algo similar con elgetfaclComando que normalmente se encuentra en los sistemas GNU., sobre la base dela respuesta de eduardo, necesitaríamos decodificar el campo del archivo (donde getfaclcodifica algunos valores de bytes con \ooorepresentaciones y \como \\) con algo como:

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

Para hacer algo con esa lista de archivos, ya que no podemos usar find's -execaquí, querrás imprimir la lista delimitada por NUL:

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

Por lo tanto, puede, por ejemplo, canalizarlo xargs -r0 some-commando almacenarlo en una matriz con array=( ${(0)"$(cmd)"} )(zsh) o readarray -td '' < <(cmd)(bash 4.4+).

información relacionada