Como copiar arquivos de uma pasta usando o comando find com a ação -exec ou com xargs para outra pasta

0

Gostaria de usar o comando find com a ação -exec com o sinal de mais (+) (para maior eficiência) ou com xargs para copiar arquivos de um diretório para outro. A resposta seguinte não funciona para mim. Estou sob a versão bash: 4.3.48 (1). Tentando:

find . \( \( -type f -size -2M \) -o \( -type f -size 2M \) \) -exec cp '{}' ~/Pictures/test_folder '+'

ou:

find . \( -type f -size -2M \) -o \( -type f -size 2M \) | xargs cp -t ~/Pictures/test_folder 

não funciona para mim. Talvez eu tenha cometido algum tipo de erro sintático, mas já tentei várias variações dos comandos acima e ainda não consigo fazer funcionar. A pasta de teste é o local onde gostaria que os arquivos fossem copiados.

    
por John_Patrick_Mason 08.11.2017 / 04:53

1 resposta

3

Espero que isso funcione:

find . -type f \( -size -2M -o -size 2M \) -exec cp -t ~/Pictures/test_folder {} +

(tirei o teste comum -type f .)

Com + , espera-se que o {} seja o último item em um comando -exec . De o manual de localização do GNU :

% bl0ck_qu0te%

Se você usa find e xargs , lembre-se de usar as opções -print0 e -0 :

find ... -print0 | xargs -0 cp -t ...

Com -print0 , os nomes dos arquivos são delimitados com o caractere ASCII NUL, o único não permitido nos caminhos. Sem isso, xargs poderia dividir nomes de arquivos em espaços, portanto, ./file1 - foo.txt seria visto como ./file1 , - e foo.txt pelo comando cp .

    
por muru 08.11.2017 / 05:36