Hier herrscht viel Verwirrung, weil es nicht nur eine gibt zgrep
. Ich habe zwei Versionen auf meinem System, zgrep
von gzip
und zgrep
von zutils
. Ersteres ist nur ein Wrapper-Skript, das aufgerufen wird gzip -cdfq
. Der -r, --recursive
Schalter wird nicht unterstützt . 1
Letzteres ist ein c++
Programm und unterstützt die -r, --recursive
Option.
Beim Laufen zgrep --version | head -n 1
wird angezeigt, welche davon (falls vorhanden) die Standardeinstellung ist:
zgrep (gzip) 1.6
ist das Wrapper-Skript,
zgrep (zutils) 1.3
ist die cpp
ausführbare Datei.
Wenn Sie Letzteres haben, können Sie Folgendes ausführen:
zgrep 'pattern' -r --format=gz /path/to/dir
Auf jeden Fall funktioniert find
+ , wie vorgeschlagen, zgrep
mit beiden Versionen von zgrep
:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Wenn zgrep
in Ihrem System etwas fehlt (höchst unwahrscheinlich), können Sie Folgendes versuchen:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
Aber es gibt einen großen Nachteil: Sie werden nicht wissen, wo die Übereinstimmungen sind, da den übereinstimmenden Zeilen kein Dateiname vorangestellt ist.
1: weil es problematisch wäre
zgrep
:zgrep - search possibly compressed files for a regular expression