Chmod recursivo correto, separado para arquivos e diretórios

5

Eu gostaria de recodificar chmod um diretório para que:

  • Arquivos são 0664
  • Diretórios são 0775

Como fazer melhor, mais curto, mais chique? :) Talvez, use umask de alguma forma?

Todas as soluções find são muito longas: eu sempre termino com Copy-Paste:)

    
por kolypto 04.05.2012 / 19:56

6 respostas

14

Dependendo da sua versão do chmod, você pode fazer isso:

chmod -R . ug+rwX,o+rX,o-w

Observe o capital X. Isso define o bit executável em diretórios e arquivos que já possuem algum bit de execução já definido.

Note que você só pode usar o X com '+', não '=' ou '-'.

    
por 04.05.2012 / 20:09
7

Melhor, mais curto, mais chique do que o que?

cd /directory
find . -type d -exec chmod 0755 {} +
find . -type f -exec chmod 0664 {} +
    
por 04.05.2012 / 20:02
4

Adicionando um oneliner ao mix

find -type f -exec chmod 0644 {} + -o -type d -exec chmod 0755 {} +
    
por 04.05.2012 / 20:03
3
find /dir -type f -print0 |xargs -0 chmod 0644
find /dir -type d -print0 |xargs -0 chmod 0775

Teste-o antes de usá-lo em ambiente real

    
por 04.05.2012 / 20:02
1

Estou usando isso para qualquer coisa copiada dos sistemas de arquivos FAT:

chmod -R a-x+X .

Se isso não funcionar, por exemplo, no Mac OS X, experimente a versão GNU do comando chmod :

gchmod -R a-x+X .
    
por 04.05.2012 / 20:07
1

Sem saber mais sobre por que você está tentando fazer isso, os motivos mais comuns que as pessoas tendem a usar são:

  • Arquivos e diretórios são outros graváveis

    chmod -R o-w /path/to/dir

  • Arquivos e diretórios não podem ser gravados em grupo

    chmod -R g+w /path/to/dir

Ou combine os dois:

chmod -R o-w,g+w /path/to/dir

Como alternativa, se você deseja que arquivos e diretórios tenham as permissões corretas por padrão, modifique o umask do processo de criação.

Basicamente, é um dia raro usar os modos numéricos com chmod ; Normalmente, os diretórios já têm o bit executável definido e os arquivos que não precisam dele, então por que não fazer nada quando os operadores + e - obviam a necessidade de fazê-lo?

    
por 04.05.2012 / 23:35