xargs y cp: ¿expansión múltiple de estilo de búsqueda "{}+"?

xargs y cp: ¿expansión múltiple de estilo de búsqueda "{}+"?

Me gustaría copiar un grupo de archivos a la carpeta de destino. Pero sin necesidad de generar una nueva instancia cppara cada operación.

El formato de argumento cpparece ser:

cp src_file1 src_file2 src_file3 dest_dir/

Suponiendo que tengo un archivo con los nombres de los archivos fuente enumerados línea por línea, ¿cómo se puede hacer esto?

Como tengo una gran cantidad de archivos, la idea de @Scott a continuación no funcionará, ya que alcanzará la longitud máxima de la línea de comando.

Me gustaría de alguna manera canalizar ese archivo de nombres de archivos cpy dejar que haga su trabajo. xargsTampoco parece poder ayudar, ya que quiere agregar la expansión al final de la línea de comando.

Se puede hacer esto?

Gracias

Respuesta1

si filelistcontiene

apple
orange
banana

donde esos son los nombres de los archivos que desea copiar al fruitydirectorio, escriba

cp `cat filelist` fruity

No necesitas el /al final.

Advertencia: esto no funcionará si alguno de los nombres de archivos contiene espacios, por ejemplo, passion fruit.

Respuesta2

Simular print0de encontrar:

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

esta muestra incluye xargs -0,--target-directory

información relacionada