41 votes

Comment puis-je effectuer un chmod récursif uniquement sur les répertoires?

Je veux modifier les autorisations sur un arbre sur Centos 4 pour ajouter des autorisations d'exécution à tous les répertoires de manière récursive à partir d'un répertoire. Si j'utilise chmod normal, les fichiers autres que les répertoires sont également modifiés :

chmod -R o+x /mon/chemin/ici

Comment puis-je affecter uniquement les répertoires ?

59voto

Daniel Beck Points 105590

Exécutez find sur -type d (répertoires) avec la commande -exec pour effectuer le chmod uniquement sur les dossiers :

find /votre/chemin/ici -type d -exec chmod o+x {} \;

Pour vous assurer qu'il ne le fait que sur les objets désirés, vous pouvez d'abord exécuter find /votre/chemin/ici -type d; il affichera simplement les répertoires qu'il trouve.

24voto

Voir Exemples en ligne de commande - chmod dans Wikipedia.

# Supprimer la permission d'exécution sur tous les fichiers d'un répertoire
# tout en permettant la navigation dans les répertoires.
chmod -R a-x+X répertoire

Comme ajouté par Daniel : cela devrait fonctionner dans votre cas :

chmod -R o+X répertoire

1voto

Mark White Points 11
find /home/mydir -type d | xargs chmod ugo+rx

Cela fonctionne sur CentOS6, ce que la commande find -exec ci-dessus ne fait pas. Fondamentalement, cela envoie simplement la liste des répertoires à la commande xargs qui les envoie à chmod. Le chmod définit ensuite la lecture universelle et exécute (recherche) sur les répertoires. Pour le faire pour tous les utilisateurs dans le dossier home, utilisez sudo :

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X