Comment chmod 755 tous les répertoires mais aucun fichier (récursivement) ?
Inversement, comment donner un chmod uniquement aux fichiers (récursivement) mais pas aux répertoires ?
Pour donner récursivement aux répertoires des privilèges de lecture et d'exécution :
find /path/to/base/dir -type d -exec chmod 755 {} +
Pour donner récursivement les privilèges de lecture aux fichiers :
find /path/to/base/dir -type f -exec chmod 644 {} +
Ou, s'il y a beaucoup d'objets à traiter :
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Ou, pour réduire le frai de chmod
:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Une raison courante pour ce genre de chose est de mettre les répertoires à 755 mais les fichiers à 644. Dans ce cas, il existe un moyen un peu plus rapide que l'exemple de find
de Nik :
chmod -R u+rwX,go+rX,go-w /path
Signification :
-R
= récursivement ;u+rwX
= Les utilisateurs peuvent lire, écrire et exécuter ;go+rX
= le groupe et les autres peuvent lire et exécuter ;go-w
= le groupe et d'autres personnes ne peuvent pas écrireLa chose importante à noter ici est que la majuscule X
agit différemment de la minuscule x
. En manuel, nous pouvons lire :
Les bits d'exécution/de recherche si le fichier est un répertoire ou l'un des bits d'exécution/de recherche sont définis dans le mode original (non modifié).
En d'autres termes, chmod u+X sur un fichier n'activera pas le bit d'exécution, et g+X ne l'activera que s'il est déjà activé pour l'utilisateur.
Si vous voulez vous assurer que les fichiers sont définis sur 644 et qu'il y a des fichiers dans le chemin qui ont le drapeau d'exécution, vous devrez d'abord supprimer le drapeau d'exécution. Le +X ne supprime pas l'indicateur d'exécution des fichiers qui l'ont déjà.
Exemple :
chmod -R ugo-x,u+rwX,go+rX,go-w path
Mise à jour : cela semble échouer parce que le premier changement (ugo-x) rend le répertoire non exécutable, donc tous les fichiers en dessous ne sont pas modifiés.