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.