Aplique chmod recursivo apenas a arquivos ou pastas

2

Gostaria de aplicar chmods a arquivos e pastas em uma linha,

Basicamente:

chmod 700 ./* -R # but only apply to folders
chmod 600 ./* -R # but only apply to files

É claro que eu pesquisei no Google e li manpages.

Então a questão é: o seguinte tem alguma desvantagem, risco ou é seguro?

find . -type f -print0 | xargs -0 chmod 600 && find . -type d -print0 | xargs -0 chmod 700
    
por DanFromGermany 29.08.2014 / 17:09

1 resposta

4

Existe outra possibilidade que descobri usando ACLs: o X maiúsculo. Dada a seguinte estrutura (três diretórios, três arquivos):

drw------- 1/
drw------- 2/
drw------- 3/
-rw------- 4
-rw------- 5
-rw------- 6

É possível definir a execução, mas apenas para diretórios, usando:

chmod u+X *

O que resultará em:

drwx------ 1/
drwx------ 2/
drwx------ 3/
-rw------- 4
-rw------- 5
-rw------- 6

Em comparação com find e xargs , isso tem a vantagem de exigir apenas um comando e, portanto, nenhum pipe. Por essa razão, eu estaria inclinado a dizer que isso é mais rápido.

No seu exemplo, você está basicamente usando dois comandos em uma linha:

  • O primeiro pesquisa arquivos, imprime seus nomes e xargs faz o resto.
  • A segunda pesquisa diretórios, o mesmo comportamento.

Em cada uma dessas chamadas, você executa três comandos :

  • Execute find para que seja impresso os nomes dos arquivos nos quais você tem interesse.
  • Passe esses nomes para xargs para que ele funcione como um wrapper em torno de chmod (que é, portanto, chamado apenas uma vez).

Também é interessante notar que, usando && , você garante que o segundo comando seja executado apenas se o primeiro for bem-sucedido (ainda assim, não vejo como find poderia falhar no seu caso). / p>

No entanto, ao usar apenas find ( -exec ), o comando chmod é chamado para cada arquivo que corresponde aos critérios find . Se você tiver 200 arquivos em seu diretório, chmod será chamado 200 vezes, o que é mais lento do que chamar chmod uma vez, em 200 arquivos. É claro que, no final, como chmod é uma operação relativamente rápida e casual, você não sentirá a diferença em um número razoável de arquivos.

Finalmente, outro detalhe sobre a passagem de nomes de arquivos entre programas: espaços. De acordo com como cada comando processa nomes de arquivos (usando aspas adequadas ou não), você pode encontrar problemas ao processar arquivos com espaços em seus nomes (já que Este Super Picture.png pode ser processado rapidamente como , Super e Picture.png ).

    
por 29.08.2014 / 18:59