setfacl
ha un ricorsivo opzione (-R
) proprio come chmod
:
-R, --recursive Apply operations to all files and directories recursively. This option cannot be mixed with `--restore'.
consente anche l'uso della x maiuscola X
permesso, che significa:
execute only if the file is a directory or already has execute permission for some user (X)
quindi fare quanto segue dovrebbe funzionare:
setfacl -R -m u:colleague:rwX .
(tutte le citazioni provengono da man setfacl
per acl-2.2.52 come fornito con Debian)
Come accennato da umläute, il comando setfacl -R
con la "X" maiuscola è la strada da percorrere, come:
setfacl -R -m u:colleague:rwX .
Tuttavia, per coloro che hanno bisogno di riapplicare l'ACL in modo recrusivo (ad esempio "riapplica i permessi alle sottodirectory" alla Windows).
find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
Quel comando potrebbe essere suddiviso per evitare errori come 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/')
Nota che la sintassi <( something )
è Sostituzione processo , specifico di bash. Potrebbe essere necessario creare un file temporaneo se utilizzi un'altra shell.