Como posso executar um chmod recursivo apenas em diretórios?

31

Quero alterar as permissões em uma árvore no Centos 4 para adicionar permissões de execução para todos os diretórios recursivamente a partir de um diretório. Se eu usar o chmod normal, outros arquivos além dos diretórios também serão modificados:

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

Como posso afetar apenas diretórios?

WilliamKF
fonte

Respostas:

48

Executar findem -type d( diretórios ) com o -execprincipal para realizar a chmodapenas em pastas:

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

Para ter certeza de que apenas o executa nos objetos desejados, você pode executar apenas find /your/path/here -type dprimeiro; simplesmente imprimirá os diretórios que encontrar.

Daniel Beck
fonte
Você poderia explicar o que {} \; faz?
Srekel
2
@Srekel veja esta resposta askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Veja Exemplos de linha de comando - chmod na Wikipedia.

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

Conforme adicionado por Daniel: isso deve funcionar no seu caso:

chmod -R o+X directory
mmdemirbas
fonte
Isso afetaria as permissões atuais de arquivos nos diretórios.
scriptmonster 29/07
@scriptmonster a linha citada está errada neste caso, mas chmod -R o+X directorydeve funcionar para o OP.
Daniel Beck
1
Para quem se pergunta sobre a diferença, como eu, é que o X também aplicará permissões de execução a qualquer arquivo que já tenha pelo menos um bit de permissão de execução definido (usuário, grupo ou outro). No caso geral, a resposta aceita é melhor.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Isso funciona no CentOS6, que o comando acima encontra -exec não. Basicamente, ele apenas envia a lista de diretórios ao comando xargs, que os envia ao chmod. O chmod então define leitura e execução universal (pesquisa) nos diretórios. Para fazer isso para todos os usuários em casa, use o sudo:

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