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

31

Je souhaite modifier les autorisations sur une arborescence sur Centos 4 pour ajouter des autorisations d'exécution pour 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 /my/path/here

Comment puis-je uniquement affecter les répertoires?

WilliamKF
la source

Réponses:

48

Exécutez findsur -type d( répertoires ) avec le -execprincipal pour effectuer le chmodseul sur les dossiers:

find /your/path/here -type d -exec chmod o+x {} \;

Pour être sûr qu'il ne l'exécute que sur les objets souhaités, vous pouvez exécuter juste en find /your/path/here -type dpremier; il imprimera simplement les répertoires qu'il trouve.

Daniel Beck
la source
Pourriez-vous expliquer ce que {} \; Est-ce que?
Srekel
2
@Srekel voir cette réponse askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Voir Exemples de ligne de commande - chmod dans Wikipedia.

chmod -R a-x+X directory    remove the execute permission on all files in 
                            a directory tree, while allowing for directory browsing.

Comme l'a ajouté Daniel: cela devrait fonctionner dans votre cas:

chmod -R o+X directory
mmdemirbas
la source
Cela affecterait les autorisations actuelles des fichiers dans les répertoires.
scriptmonster
@scriptmonster la ligne citée est incorrecte dans ce cas, mais chmod -R o+X directorydevrait fonctionner pour l'OP.
Daniel Beck
1
Pour ceux qui s'interrogent sur la différence, comme moi, c'est que X appliquera également des autorisations d'exécution à tout fichier qui a déjà au moins un bit d'autorisation d'exécution déjà défini (utilisateur, groupe ou autre). Dans le cas général, la réponse acceptée est meilleure.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Cela fonctionne sur CentOS6, ce que la recherche ci-dessus ne fait pas. Fondamentalement, il dirige simplement la liste des répertoires vers la commande xargs qui les envoie à chmod. Le chmod définit ensuite la lecture et l'exécution universelles (recherche) sur les répertoires. Pour ce faire, pour tous les utilisateurs à domicile, utilisez sudo:

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