Comment appliquer récursivement les répertoires chmod sans affecter les fichiers?

18

Après avoir appliqué chmod -Rà un répertoire, les autorisations sont modifiées pour tout ce qu'il contient (fichiers et répertoires). Comment puis-je ajouter des xautorisations d' exécution / recherche ( ) aux répertoires sans modifier les fichiers?

Ivan
la source

Réponses:

13

Vous pouvez utiliser find .

find ./ -type d -execdir chmod 750 {} +

Où 750 est le mode que vous souhaitez appliquer et "./" est le répertoire que vous rechercherez récursivement.

EDIT : Merci à @Gilles et find (1) , j'ai révisé cela pour plus de sécurité et de performances.

ewindisch
la source
@Gilles Merci, il n'est pas trop fréquent que j'apprenne quelque chose de nouveau sur les outils Unix :-) C'est génial. De plus, en lisant maintenant la documentation de recherche , il faut vraiment utiliser -execdir à la place.
ewindisch
7

Dans ce cas particulier, vous pouvez utiliser à la Xplace de xqui n'ajoute que les bits aux répertoires ou fichiers qui ont déjà le bit exécutable défini pour certains utilisateurs (c'est-à-dire chmod -R +X my_dir).

En général (par exemple, si vous souhaitez rendre tous les répertoires lisibles sans affecter les fichiers), vous pouvez utiliser findavec -type dou si vous utilisez zsh (ou bash 4 avec shopt -s globstar) le **/glob (les deux sans passer le -Rdrapeau à chmod).

sepp2k
la source
@ Gilles: Bon point, j'ai ajouté cela à la réponse.
sepp2k
1
"utilisez X au lieu de x qui n'ajoute que les bits aux répertoires ou fichiers qui ont déjà le bit exécutable défini pour un utilisateur" - Merci! J'ai raté beaucoup cette chose!
Ivan