Fichiers chmod uniquement dans tous les sous-répertoires

54

S'il vous plaît, aidez-moi avec chmod, j'ai la structure de fichier suivante

-dir1
--file1
--file2
--dir1a
---file1a1
---file1a2
--dir1b
---file1b1
---file1b2

Comment puis-je chmod 655 à tous les fichiers sous dir1 et à tous les sous-répertoires? Ainsi, tous les fichiers auront la permission 655 et tous les répertoires resteront tels qu’ils étaient.

Je vous remercie

nétique
la source

Réponses:

108

Mieux vaut utiliser

find . -type f -exec chmod 655 -- {} +

L’autre solution proposée par @sagarchalise ne fonctionnera pas si les noms de fichiers contiennent des espaces ou commencent par un tiret.

enzotib
la source
16
Dans le même ordre d'idées, vous pouvez utiliser tous les répertoires que vous pouvez utiliser find . -type d -exec chmod 755 {} +pour modifier tous les répertoires en 755.
Kris Harper
2
A quoi sert le +?
Brettski
3
@Brettski: le +signe est étendu findà la liste des chemins de fichiers (ou une partie de celle-ci, si elle est trop longue).
enzotib
3
Quel est le - pour?
Orient
2
Le --indique la fin des options de la ligne de commande. Cela empêche un fichier commençant par un trait d'union d'être interprété comme une option de ligne de commande, comme cela viendrait après --.
Tim Tisdall
8

Je pense aller à l'intérieur dir1et

find . -type f | xargs chmod 655

fera l'affaire.

Sagarchalise
la source
cela fonctionne aussi mais j'ai un avertissement avec "Aucun fichier ou répertoire de ce type"
netic
@manetic: cela dépend, comme je l'ai dit dans ma réponse, des noms de fichiers contenant des espaces.
enzotib
4
Pour être complet, le changer pour trouver. -type f -print0 | xargs -0 chmod 655 réglerait le problème d'espace, je crois, bien que la réponse de @ enzotib soit plus concise
matt freake
Ce que Matt Freake a dit
Sergiy Kolodyazhnyy 4/0417