
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 getfacl
recursivamente, 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
Consfind
o el find
incorporado delbosh
cá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 sfind
y bosh
se envían como parte deHerramientas Schily.
Para conseguir algo similar con elgetfacl
Comando que normalmente se encuentra en los sistemas GNU., sobre la base dela respuesta de eduardo, necesitaríamos decodificar el campo del archivo (donde getfacl
codifica algunos valores de bytes con \ooo
representaciones 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 -exec
aquí, 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-command
o almacenarlo en una matriz con array=( ${(0)"$(cmd)"} )
(zsh) o readarray -td '' < <(cmd)
(bash 4.4+).