Chmod recursivo: rw para arquivos, rwx para diretórios

25

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.

    
por Deleted 06.10.2009 / 20:56

3 respostas

19

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 {} \; \)
    
por 06.10.2009 / 22:05
32

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.)

    
por 06.10.2009 / 20:59
13

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.

    
por 06.10.2009 / 21:09