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?

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.


Pourriez-vous expliquer ce que {} \; Est-ce que?
Srekel


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

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.