Alterar o proprietário dos arquivos recursivamente, mas não os diretórios

14

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

Quero alterar o proprietário (ou permissão) de todos os arquivos, mas não dos diretórios. Isso ocorre porque estou tentando SCP arquivos adicionais de um servidor remoto (~ 150k diretórios e ~ 3,6m arquivos).

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

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

Marcus Brunsten
fonte

Respostas:

20

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

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

Para chmod:

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

-type fvai findficheiros só.

heemail
fonte
1
Funciona muito bem! Obrigado! +1 para chmod e chown
Marcus Brunsten 15/10/2015
2
Então find, não dispara ARG_MAX? Eu sempre pensei que teria. Você sempre aprende algo :)
kos
5

Outra alternativa é usar xargs. Você precisará usar a -print0opção com finde uma -0opção correspondente de xargs:

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

De man find:

-print0

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

xargstambém manipulará corretamente ARG_MAX.

AP
fonte
2
find..execlida com nomes de arquivos estranhos ... o que faz você pensar que não?
heemayl
1
@ heemayl Fiz alguns testes e parece que você está certo. Eu estou corrigido. Obrigado por apontar, atualizei minha resposta.
AP