¿Cómo cambiar los permissions en las carpetas, pero no en los files?

¿Hay un command linux conciso (que funcionará en OSX) para cambiar permissions en carpetas y todo su contenido, pero dejar files en el directory actual sin tocar? Por ejemplo:

/ parent / folder1 <-change permissions
/ parent / folder2 <-change permissions
/ parent / folder3 <-change permissions
/ parent / folder3 / file1 <-change permissions
/ parent / folder3 / file2 <-change permissions
/ parent / file1 <-no cambia los permissions
/ parent / file2 <-no cambia los permissions

Usted tendría que ejecutar 2 commands creo. Esta es una forma de hacerlo:

# find . -mindepth 1 -type d | xargs chmod 700 # find . -mindepth 2 | xargs chmod 700 

El primero hace directorys en el nivel de directory actual y más profundo. El segundo hace todos los files y directorys más profundos que el directory actual.

Esto cambiará los permissions de cada directory en el directory actual y todos los files y carpetas dentro de ellos, creo que eso es lo que quieres, pero ten cuidado debido a la recursion …

 find . -maxdepth 1 -type d -exec chmod -R 700 {} \; 

Puedes usar find for this o quizás, con un loop, for :

 for directory in parent/*; do if [ -d $directory ]; then chmod -R 700 $directory; fi ;done 

Hay un caso trivial en el que chmod puede hacer esto por su count. Si establece modo +X (nota, capital, no minúsculas), sólo se aplicará a los directorys. Esto se utiliza comúnmente para los casos en los que se desea que todos los files de un tree de directorys o mundial puedan ser leídos. Usted haría algo como esto:

 chmod a+rX somedir 

Esto agregará permiso de lectura y ejecución a somedir y todos los directorys debajo de él, pero sólo lee el permiso a los files regulares debajo de él. Lamentablemente no existe un modo correspondiente para permissions de lectura / escritura, aunque.

 find . -type d -mindepth 1 -print -exec chmod 755 {}/* \; 

Busque todos los subdirectorys del directory actual (-type d y -mindepth 1) y ejecute chmod para todos los files de cada directory encontrado.

{} hace reference al directory que se está evaluando, y /* le dice a chmod que opere sólo los files de ese directory.

Aquí está el uno-trazador de líneas para el caso general:

 find /parent -maxdepth 1 -type d -print0 | xargs -0 chmod -R 700 

Los arguments -print0 y -0 utilizan NUL en lugar de newline como separador de loggings, por lo que es seguro para nombres de file con espacios, newlines, etc. Y, a diferencia de -exec , -exec nombres de file en less invocaciones de chmod .

Prima:

En los casos en los que sabe que no tiene directorys ocultos en el nivel superior de /parent (como /parent/.foo ), es aún más fácil:

 chmod -R 700 /parent/*/