setfacl
a un récursif choix (-R
) comme chmod
:
-R, --recursive Apply operations to all files and directories recursively. This option cannot be mixed with `--restore'.
il permet également l'utilisation du capital-x X
autorisation, ce qui signifie :
execute only if the file is a directory or already has execute permission for some user (X)
donc faire ce qui suit devrait fonctionner :
setfacl -R -m u:colleague:rwX .
(toutes les citations sont de man setfacl
pour acl-2.2.52 tel que livré avec Debian)
Comme mentionné par umläute, la commande setfacl -R
avec "X" majuscule est la voie à suivre, comme :
setfacl -R -m u:colleague:rwX .
Cependant, pour ceux qui ont besoin de réappliquer l'ACL de manière récréative (c'est-à-dire comme "ré-appliquer les permissions sur les sous-répertoires" à la Windows).
find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
Cette commande pourrait être divisée pour éviter une erreur comme 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/')
Notez que la syntaxe <( something )
est la substitution de processus , qui est spécifique à bash. Vous devrez peut-être créer un fichier temporaire si vous utilisez un autre shell.