Changer récursivement le chmod des dossiers seulement

Changer le chmod seulement des dossiers en 755, sans toucher aux fichiers :

find /path -type d -exec chmod 755 {} +

De ma même manière, pour changer uniquement le chmod des fichiers :

find /path -type f -exec chmod 644 {} +

Avec beaucoup de dossiers/fichiers

Si le nombre de dossiers (ou fichiers) est très important, il est préférable d’utiliser une des méthodes suivantes :

# Méthode avec un sous-process
chmod 755 $(find /path -type d)

# Méthode avec xargs
find /path -type d -print0 | xargs -0 chmod 755 

Ces deux méthodes évitent d’executer chmod pour chaque entrée.

Permissions 755 sur les dossiers, 644 sur les fichiers

Généralement, on souhaite juste attribuer le flag d’exécution/recherche x aux dossiers mais pas aux fichiers. Dans ce cas, il existe une méthode encore plus efficace, en utilisant X (au lieu de x) :

execute/search only if the file is a directory or already has execute permission for some user (X)

Cela donne donc :

chmod -R u=rwX,go=rX /path

Explications détaillées :

  • X n’applique les droits d’exécution que sur les dossiers, pas les fichiers ;
  • u=rwX : Users peuvent lire, écrire et exécuter ;
  • go=rX : Group et Others peuvent lire et exécuter, mais pas écrire.

Attention, cela ne supprimera pas des flags éventuels d’exécution x sur les fichiers (si quelqu’un a fait un chmod 777 par exemple). En effet, le flag X ne retire pas le droit d’exécution sur un fichier qui le possède déjà !

Pour le retirer :

chmod -R ugo-x,u=rwX,go=rX /path