Eu faço isso ocasionalmente usando um único comando find . Feio mas eficaz.
find /p/a/t/h \( -type d -exec chmod 755 {} \; \) -o \( -type f -exec chmod 644 {} \; \)
Eu quero chmod de muitos arquivos e diretórios. Como x indica lista de diretórios e execute para arquivos regulares eu gostaria de aplicar rw para arquivos e rwx para diretórios. É possível usar apenas o comando chmod ?
Se não é, qual é a maneira mais conveniente?
Fazer chmod -R 770 não é uma possibilidade, pois não quero que os arquivos comuns se tornem executáveis.
Use a permissão X na página man:
The execute/search bits if the file is a directory or any of the execute/search bits are set in the original (unmodified) mode. Operations with the perm symbol "X" are only meaningful in conjunction with the op symbol "+", and are ignored in all other cases.
Então faça o seguinte:
chmod -R a-x [directory]
chmod -R a+rwX [directory]
Isso remove o bit de execução de todos os arquivos e diretórios, seguido pela adição de privilégios de leitura e gravação a tudo e a execução de privilégios apenas em diretórios. (Nenhum arquivo regular tem o bit de execução ligado desde o primeiro passo.)
Você também pode usar find junto com xargs :
find . -type f -print0 | xargs -0 chmod 666
find . -type d -print0 | xargs -0 chmod 777
em que -type especifica d irectoria ou f ile.