xargs e cp: find-style “{} +” expansão múltipla?

0

Gostaria de copiar um grupo de arquivos para a pasta de destino. Mas sem precisar gerar uma nova instância de cp para cada operação.

O formato arg para cp parece ser:

cp src_file1 src_file2 src_file3 dest_dir/

Supondo que eu tenha um arquivo com nomes de arquivos fonte listados linha por linha, como isso pode ser feito?

Como tenho um grande número de arquivos, a idéia do @Scott abaixo não funcionará, já que atingirá o tamanho máximo da linha de comando.

Eu gostaria de de alguma forma canalizar esse arquivo de nomes de arquivos para cp e deixar fazer isso. O xargs também parece não ajudar, já que ele quer colocar a expansão no final da linha de comando.

Isso pode ser feito?

Obrigado

    
por nonot1 09.11.2012 / 00:27

2 respostas

1

Se filelist contiver

apple
orange
banana

onde esses são os nomes dos arquivos que você deseja copiar para o diretório fruity , digite

cp 'cat filelist' fruity

Você não precisa do / no final.

Aviso: isso não funcionará se algum dos nomes de arquivo contiver espaços, por exemplo, passion fruit .

    
por 09.11.2012 / 00:55
0

Simule print0 de encontrar:

cat filelist |perl -p -e 's/\n/xargs -00/' |xargs -0 cp --target-directory dest_dir/

este exemplo inclui --target-directory , %code%

    
por 09.11.2012 / 21:02