xargs e cp: expansão múltipla estilo find "{}+"?

xargs e cp: expansão múltipla estilo find "{}+"?

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

O formato arg para cpparece ser:

cp src_file1 src_file2 src_file3 dest_dir/

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

Como tenho um número muito grande de arquivos, a ideia do @Scott abaixo não funcionará, pois atingirá o comprimento máximo da linha de comando.

Eu gostaria de canalizar de alguma forma esse arquivo de nomes de arquivos cpe deixá-lo fazer isso. xargstambém não consigo ajudar, pois deseja adicionar a expansão no final da linha de comando.

Isso pode ser feito?

Obrigado

Responder1

Se filelistcontém

apple
orange
banana

onde esses são os nomes dos arquivos que você deseja copiar para o fruitydiretório, 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.

Responder2

Simular print0de encontrar:

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

esta amostra inclui xargs -0,--target-directory

informação relacionada