Una de mis prácticas comunes es realizar greps en todos los archivos de cierto tipo, por ejemplo, encontrar todos los archivos HTML que tienen la palabra "rumpus" en ellos. Para hacerlo, yo uso
find /path/to -name "*.html" | xargs grep -l "rumpus"
Ocasionalmente, find
devolverá un archivo con un espacio en su nombre como my new file.html
. Sin embargo, cuando se xargs
pasa esto a grep
, obtengo estos errores:
grep: /path/to/bad/file/my: No such file or directory
grep: new: No such file or directory
grep: file.html: No such file or directory
Puedo ver lo que está pasando aquí: ya sea la tubería o el xargs
está tratando los espacios como delimitadores entre archivos. Sin embargo, por mi vida, no puedo entender cómo prevenir este comportamiento. ¿Se puede hacer con find
+ xargs
? ¿O tengo que usar un comando completamente diferente?
Si las versiones find y xarg en su sistema no son compatibles
-print0
y-0
cambian (por ejemplo, AIX find y xargs) puede usar esto:Aquí sed se encargará de escapar de los espacios para xargs.
fuente
find
a todos de nuevo.