archivos chmod solo en todos los subdirectorios

54

Por favor, alguien me ayude con chmod, tengo la siguiente estructura de archivos

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

¿Cómo hago chmod 655 para todos los archivos bajo dir1 y todos los subdir? Por lo tanto, todos los archivos tendrán permiso 655 y todos los directorios permanecerán como estaban.

Gracias

netic
fuente

Respuestas:

108

Mejor usar

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

La otra solución propuesta de @sagarchalise no funcionará si los nombres de archivo contienen espacios o comienzan con un guión.

enzotib
fuente
16
Relacionado, a chmod todos los directorios que puede usar find . -type d -exec chmod 755 {} +para cambiar todos los directorios a 755.
Kris Harper
2
¿Para qué sirve el +?
Brettski
3
@Brettski: el +signo se expande finda la lista de rutas de archivo (o parte de él, si es demasiado largo).
enzotib
3
¿Para qué sirve?
Oriente
2
El --indica el final de las opciones de línea de comando. Esto evita que un archivo que comienza con un guión se interprete como una opción de línea de comando, ya que vendría después de --.
Tim Tisdall
8

Creo que entrar dir1y

find . -type f | xargs chmod 655

Hará el truco.

sagarchalise
fuente
esto también funciona pero tengo una advertencia con "No existe tal archivo o directorio"
netic
@manetic: depende, como dije en mi respuesta, de los nombres de archivo que contienen espacios.
enzotib
44
Para completar, cambiarlo para encontrar. -tipo f -print0 | xargs -0 chmod 655 podría solucionar el problema de espacio en mi opinión, aunque la respuesta de @ enzotib es más concisa
mate freake
lo que dijo Matt Freake
Sergiy Kolodyazhnyy