Aquí hay mucha confusión porque no hay una sola zgrep
. Tengo dos versiones en mi sistema, zgrep
desde gzip
y zgrep
desde zutils
. El primero es solo un script envoltorio que llama gzip -cdfq
. No es compatible con el -r, --recursive
interruptor. 1
Este último es un c++
programa y admite la -r, --recursive
opción.
La ejecución zgrep --version | head -n 1
revelará cuál de ellos (si corresponde) es el predeterminado:
zgrep (gzip) 1.6
es el script de envoltura,
zgrep (zutils) 1.3
es el cpp
ejecutable
Si tienes este último, puedes ejecutar:
zgrep 'pattern' -r --format=gz /path/to/dir
De todos modos, como se sugiere, find
+ zgrep
funcionará igualmente bien con cualquier versión de zgrep
:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Si zgrep
falta 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