¿Cómo puedo usar xargs para copiar archivos que tienen espacios y comillas en sus nombres?
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 find
y grep
con 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
.
Puedes combinar todo eso en un solo find
comando:
find . -iname "*foobar*" -exec cp -- "{}" ~/foo/bar \;
Esto manejará nombres de archivos y directorios con espacios. Puede utilizar -name
para obtener resultados que distingan entre mayúsculas y minúsculas.
Nota: El --
indicador pasado a cp
evita que procese archivos que comiencen con -
opciones.
find . -print0 | grep --null 'FooBar' | xargs -0 ...
No sé si es grep
compatible --null
ni si xargs
es compatible -0
con Leopard, pero en GNU todo está bien.
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