web-dev-qa-db-fra.com

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

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 affecter uniquement les répertoires?

30
WilliamKF

Exécutez find sur -type d ( répertoires ) avec le -exec primaire pour exécuter la chmod uniquement 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 d'abord exécuter uniquement find /your/path/here -type d; il va simplement imprimer les répertoires qu'il trouve.

47
Daniel Beck

Voir Exemples de ligne de commande - chmod sur 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
16
user118305
find /home/mydir -type d | xargs chmod ugo+rx

Cela fonctionne sur CentOS6, ce que la recherche ci-dessus -exec ne fait pas. Fondamentalement, il ne fait que diriger la liste des répertoires vers la commande xargs qui les envoie à chmod. Le chmod définit ensuite une lecture et une exécution universelles (recherche) sur les répertoires. Pour ce faire, tous les utilisateurs à la maison utilisent Sudo:

Sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
1
Mark White