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

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

Eu tenho um diretório que possui cerca de 50 mil diretórios e cerca de 1 milhão de arquivos.

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 (~ 150 mil diretórios e ~ 3,6 milhões de arquivos).

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

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

Responder1

Você pode usar find, tem a vantagem adicional de ARG_MAXnão ser acionado no processo. Do diretório pai:

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

Para chmod:

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

-type fserão findapenas arquivos.

Responder2

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

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

De man find:

-imprimir0

imprima o nome completo do arquivo na saída padrão, seguido porum caractere nulo. Essepermite nomes de arquivos que contenham novas linhas ou outros tipos de espaço em brancopara ser interpretado corretamente por programas que processam a saída find. Esta opção corresponde à opção -0 de xargs.

xargstambém irá lidar corretamente com ARG_MAX.

informação relacionada