¿Cómo puedo usar xargs para copiar archivos que tienen espacios y comillas en sus nombres?

Resuelto Drew Stephens asked hace 15 años • 22 respuestas

Estoy intentando copiar un montón de archivos debajo de un directorio y varios de los archivos tienen espacios y comillas simples en sus nombres. Cuando intento unir findy grepcon xargs, aparece el siguiente error:

find .|grep "FooBar"|xargs -I{} cp "{}" ~/foo/bar
xargs: unterminated quote

¿Alguna sugerencia para un uso más sólido de xargs?

Esto está en Mac OS X 10.5.3 (Leopard) con BSD xargs.

Drew Stephens avatar Sep 27 '08 14:09 Drew Stephens
Aceptado

Puedes combinar todo eso en un solo findcomando:

find . -iname "*foobar*" -exec cp -- "{}" ~/foo/bar \;

Esto manejará nombres de archivos y directorios con espacios. Puede utilizar -namepara obtener resultados que distingan entre mayúsculas y minúsculas.

Nota: El --indicador pasado a cpevita que procese archivos que comiencen con -opciones.

godbyk avatar Sep 27 '2008 08:09 godbyk

find . -print0 | grep --null 'FooBar' | xargs -0 ...

No sé si es grepcompatible --nullni si xargses compatible -0con Leopard, pero en GNU todo está bien.

C. K. Young avatar Sep 27 '2008 07:09 C. K. Young

La forma más sencilla de hacer lo que quiere el cartel original es cambiar el delimitador de cualquier espacio en blanco al carácter de final de línea como este:

find whatever ... | xargs -d "\n" cp -t /var/tmp
user87601 avatar Nov 04 '2015 17:11 user87601