Há muita confusão aqui, porque não há apenas uma zgrep
. Eu tenho duas versões no meu sistema, zgrep
de gzip
e zgrep
para zutils
. O primeiro é apenas um script de invólucro que chama gzip -cdfq
. Não suporta o -r, --recursive
switch. 1
O último é um c++
programa e suporta a -r, --recursive
opção.
A execução zgrep --version | head -n 1
revelará qual deles (se houver) é o padrão:
zgrep (gzip) 1.6
é o script do wrapper,
zgrep (zutils) 1.3
é o cpp
executável.
Se você tiver o último, poderá executar:
zgrep 'pattern' -r --format=gz /path/to/dir
De qualquer forma, como sugerido, o find
+ zgrep
funcionará igualmente bem com qualquer uma das versões de zgrep
:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Se zgrep
estiver ausente do seu sistema (altamente improvável), você pode tentar:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
mas há uma grande desvantagem: você não saberá onde estão as correspondências, pois não há um nome de arquivo anexado às linhas correspondentes.
1: porque seria problemático
zgrep
:zgrep - search possibly compressed files for a regular expression