Aquí hay mucha confusión porque no hay una sola zgrep. Tengo dos versiones en mi sistema, zgrepdesde gzipy zgrepdesde zutils. El primero es solo un script envoltorio que llama gzip -cdfq. No es compatible con el -r, --recursiveinterruptor. 1
Este último es un c++programa y admite la -r, --recursiveopción.
La ejecución zgrep --version | head -n 1revelará cuál de ellos (si corresponde) es el predeterminado:
zgrep (gzip) 1.6
es el script de envoltura,
zgrep (zutils) 1.3
es el cppejecutable
Si tienes este último, puedes ejecutar:
zgrep 'pattern' -r --format=gz /path/to/dir
De todos modos, como se sugiere, find+ zgrepfuncionará igualmente bien con cualquier versión de zgrep:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Si zgrepfalta en su sistema (muy poco probable), puede probar con:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
pero hay una desventaja importante: no sabrá dónde están las coincidencias ya que no hay un nombre de archivo antepuesto a las líneas coincidentes.
1: porque sería problemático
zgrep:zgrep - search possibly compressed files for a regular expression