Humus numericus

Aller au contenu | Aller au menu | Aller à la recherche

R, Spip et autres

Changer récursivement les permissions de répertoires

Il peut parfois être utile de changer d'un coup les permissions ou les propriétés d'un répertoire et de ses sous-répertoires, mais seulement des répertoires, pas des fichiers normaux.

Deux exemples pratiques :

  1. vous venez de transférer des fichiers depuis une parto windows, et ceux-ci ont tous la permission "éxecutable". Seulement, si vous faites un chmod -R -x *, vos répertoires vont perdre leur attribut exécutable et vous ne pourrez plus rentrer dedans. C'est gênant ;
  2. vous avez un répertoire (par exemple /var/www) que vous voulez partager entre plusieurs personnes d'un même groupe (par exemple le groupe web). L'idéal est de positionner le "sticky bit" de ce répertoire et de ses sous-répertoire pour le groupe, afin que tous les fichiers nouvellement créés appartiennent également à ce groupe. Là aussi, un chmod -R g+s * pose problème.

Voilà donc la solution à ces deux problèmes. Il suffit de se positionner dans le répertoire racine choisi et de faire un :

find . -type d | xargs chmod +x

ou, pour le deuxième problème :

find . -type d | xargs chmod g+s

Et voilou !

Commentaires

1. Le vendredi 13 mai 2005, 13:54 par Olivier Tétard

Tu peux faire aussi :
$ find . -type d -exec chmod a+x {} \;

Et pour donner lecture + execution pour les repertoires :
$ chmod -R a+rX *

@+
Olivier.

2. Le vendredi 13 mai 2005, 17:04 par J

Effectivement, je ne connaissais pas l'option X qui, si j'en crois la page de man, donne l'attribut exécutable seulement si le fichier est un répertoire ou s'il est déjà exécutable pour un utilisateur. Fort utile et plus simple que ma solution.

Merci pour l'info !

3. Le mardi 17 octobre 2006, 21:18 par kptain

Et si les répertoires contiennent des noms longs avec espaces, alors il faut utiliser (cas de l'exemple 1):

$ find . -type d -print0 | xargs -0 chmod +x