¿Cómo puedo hacer un chmod recursivo solo en directorios?

31

Quiero cambiar los permisos en un árbol en Centos 4 para agregar permisos de ejecución para todos los directorios de forma recursiva desde un directorio. Si uso chmod normal, los archivos que no sean directorios también se modifican:

chmod -R o+x /my/path/here

¿Cómo puedo afectar solo a los directorios?

WilliamKF
fuente

Respuestas:

48

Ejecutar finden -type d( directorios ) con el -execprimario para realizar el chmodúnico en las carpetas:

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

Para asegurarse de que solo lo realiza en los objetos deseados, puede ejecutar solo find /your/path/here -type dprimero; simplemente imprimirá los directorios que encuentre.

Daniel Beck
fuente
¿Podría explicar qué {} \; ¿hace?
Srekel
2
@Srekel ver esta respuesta askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Vea los ejemplos de la línea de comandos - chmod en Wikipedia.

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

Como agregó Daniel: esto debería funcionar en su caso:

chmod -R o+X directory
mmdemirbas
fuente
Esto afectaría los permisos actuales de los archivos dentro de los directorios.
scriptmonster
@scriptmonster la línea citada es incorrecta para este caso, pero chmod -R o+X directorydebería funcionar para el OP.
Daniel Beck
1
Para aquellos que se preguntan sobre la diferencia, como yo, es que X también aplicará permisos de ejecución a cualquier archivo que ya tenga al menos un bit de permiso de ejecución ya establecido (usuario, grupo u otro). En el caso general, la respuesta aceptada es mejor.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Esto funciona en CentOS6, que el anterior find -exec no. Básicamente, simplemente canaliza la lista de directorios al comando xargs que los envía a chmod. El chmod luego establece la lectura y ejecución universal (búsqueda) en los directorios. Para hacer esto para todos los usuarios en el hogar, use sudo:

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