Várias coisas:
-
zgrep
é procurar em.z
ou.gz
arquivos compactados, não em arquivos compactadoszip
archives.Há um script (quebrado)
zipgrep
às vezes empacotado comunzip
, para pesquisarzip
archives, mas o que ele faz é executaregrep
em cada membro do archive (portanto, com-m1
eachegrep
informaria a primeira correspondência para cada arquivo).zgrep
, similarmente é um script que vem comgzip
que alimenta a saída degzip -cdfq
togrep
para cada arquivo.gzip -d
pode descompactarzip
files, mas apenas para o primeiro membro do archive e somente se ele for compactado (emzip
files, nem todos os membros são necessariamente compactados, especialmente os pequenos). -
xargs
executa quantos comandos forem necessários, mas ainda pode rodar vários se a lista de arquivos for grande.
Aqui, sua melhor aposta é provavelmente implementar zipgrep
manualmente (aqui com as ferramentas GNU):
find . -name '*.zip' -type f -exec sh -c '
unzip -Z1 "$1" |
while IFS= read -r file; do
unzip -p "$1" "$file" | grep --label="$1//$file" -Hm1 -- "$0" && exit
done' PATTERN {} \; -quit
Isso executa um shell por arquivo, mas também zipgrep
e zipgrep
executam muito mais comandos.
Pode falhar se os membros do arquivo tiverem nomes que contenham caracteres curinga ( *
, [
, ?
) ou outros caracteres como caracteres ASCII 0x1 a 0x1f e vários outros, mas isso se deve principalmente a bugs e limitações em unzip
, e isso não é tão ruim quanto ao usar zipgrep
.