chmod peut réellement le faire lui-même ; le X l'autorisation symbolique signifie "exécuter, si cela a du sens", ce qui signifie généralement sur les répertoires mais pas sur les fichiers. Ainsi, vous pouvez utiliser :
chmod -R u=rwX,go=rX /path/to/htdocs
Le seul problème potentiel est que si l'un des fichiers simples a déjà un jeu d'exécution, chmod suppose que c'est intentionnel et le garde. S'il s'agit d'un problème potentiel et vous avez la version GNU de chmod (c'est-à-dire que vous êtes sous Linux), vous pouvez l'obtenir pour supprimer toutes les autorisations d'exécution parasites comme ceci :
chmod -R a-x,u=rwX,go=rX /path/to/htdocs
Malheureusement, cette astuce ne fonctionne pas avec la version bsd (/macOS) de chmod (Je ne suis pas sûr des autres versions). C'est parce que la version bsd applique le X autorisation basée sur "le mode d'origine (non modifié)", c'est-à-dire s'il avait des bits d'exécution avant le a-x la modification a été faite (voir le man page).
Utilisez find pour rechercher des répertoires et leur appliquer chmod :
find -type d | xargs chmod 775
Utilisez le type f pour le fichier :
find -type f | xargs chmod 775
Utilisez le -type de find option pour limiter les actions aux fichiers et répertoires. Utilisez le -o option pour spécifier des actions alternatives pour différents types, vous n'avez donc qu'à exécuter find une fois, plutôt que séparément pour chaque type.
find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +