Altere o proprietário dos arquivos de forma recursiva, mas não os diretórios

14

Eu tenho um diretório com ~ 50k diretórios e ~ 1m arquivos.

Eu quero mudar o dono (ou permissão) de todos os arquivos, mas não dos diretórios. Isso porque estou tentando SCP arquivos adicionais de um servidor remoto, (~ 150k diretórios e ~ 3.6m arquivos).

O diretório que eu tenho é uma parte do diretório remoto, mas o scp falhou ...

Se eu executar o SCP novamente, ele será iniciado sobrescrevendo os arquivos que eu já copiei do diretório remoto.

    
por Marcus Brunsten 15.10.2015 / 08:28

2 respostas

20

Você pode usar find , ele tem uma vantagem adicional de que ARG_MAX não será acionado no processo. Do diretório pai:

find . -type f -exec chown newowner {} +

Para chmod :

find . -type f -exec chmod 644 {} +

-type f irá find apenas arquivos.

    
por heemayl 15.10.2015 / 08:36
5

Outra alternativa é usar xargs . Você precisará usar a opção -print0 com find e a opção -0 correspondente de xargs :

find . -type f -print0 | xargs -0 chown newuser:newgroup

De man find :

  

-print0

     

imprime o nome completo do arquivo na saída padrão, seguido por um caractere nulo . Isso permite que nomes de arquivos que contêm novas linhas ou outros tipos de espaço em branco sejam interpretados corretamente por programas que processam a saída de localização. Esta opção corresponde à opção -0 do xargs.

xargs também processará corretamente ARG_MAX .

    
por A.P. 15.10.2015 / 10:40