setfacl
tiene un recursivo opción (-R
) como chmod
:
-R, --recursive Apply operations to all files and directories recursively. This option cannot be mixed with `--restore'.
también permite el uso de la x mayúscula X
permiso, lo que significa:
execute only if the file is a directory or already has execute permission for some user (X)
así que hacer lo siguiente debería funcionar:
setfacl -R -m u:colleague:rwX .
(todas las citas son de man setfacl
para acl-2.2.52 como se envía con Debian)
Como menciona umläute, el comando setfacl -R
con "X" mayúscula es el camino a seguir, como:
setfacl -R -m u:colleague:rwX .
Sin embargo, para aquellos que necesitan volver a aplicar ACL de forma recrusiva (es decir, como "volver a aplicar permisos en subdirectorios" a la Windows).
find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
Ese comando podría dividirse para evitar errores como setfacl: foobar: Only directories can have default ACLs
.
find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')
Tenga en cuenta que la sintaxis <( something )
es Sustitución de procesos , que es específico de bash. Es posible que deba crear un archivo temporal si usa otro shell.