Viniendo en un poco tarde en esto, tuvo un problema similar y era capaz de r uso de esolve;
zcat -r /some/dir/here | grep "blah"
Como se detalla aquí;
http://manpages.ubuntu.com/manpages/quantal/man1/gzip.1.html
Sin embargo, esto no muestra el archivo original que el resultado corresponde a, en lugar de mostrar "(entrada estándar)", como se regresa después de un tubo. zcat no parece ser compatible con la salida de un nombre tampoco.
En términos de rendimiento, esto es lo que obtuvimos;
$ alias dropcache="sync && echo 3 > /proc/sys/vm/drop_caches"
$ find 09/01 | wc -l
4208
$ du -chs 09/01
24M
$ dropcache; time zcat -r 09/01 > /dev/null
real 0m3.561s
$ dropcache; time find 09/01 -iname '*.txt.gz' -exec zcat '{}' \; > /dev/null
0m38.041s
Como se puede ver, utilizando el método find|zcat
es significativamente más lento que usar zcat -r
incluso cuando se trata de un pequeño volumen de archivos. Tampoco fui capaz de hacer que la salida de zcat sea el nombre del archivo (usando -v
aparecerá aparentemente el nombre del archivo, pero no en cada línea). Parece que actualmente no hay una herramienta que proporcione tanto la velocidad como la coherencia del nombre con grep (es decir, la opción -H
).
Si necesita identificar el nombre del archivo al que pertenece el resultado, entonces deberá escribir su propia herramienta (podría hacerse en 50 líneas de código Python) o usar el método más lento. Si no necesita identificar el nombre, utilice zcat -r
.
Esperanza esto ayuda
FWIW, mi zgrep no es compatible con -R – ZombieDev
@Ned Batchelder, gracias por dar una dirección. Pero para mí, después de las opciones trabajadas zgrep "patrón" archivos – hiren
'zgrep -R --include = \ *. Gz -H" patrón "' en zsh – blacktooth