Hier herrscht viel Verwirrung, weil es nicht nur eine gibt zgrep. Ich habe zwei Versionen auf meinem System, zgrepvon gzipund zgrepvon zutils. Ersteres ist nur ein Wrapper-Skript, das aufgerufen wird gzip -cdfq. Der -r, --recursiveSchalter wird nicht unterstützt . 1
Letzteres ist ein c++Programm und unterstützt die -r, --recursiveOption.
Beim Laufen zgrep --version | head -n 1wird angezeigt, welche davon (falls vorhanden) die Standardeinstellung ist:
zgrep (gzip) 1.6
ist das Wrapper-Skript,
zgrep (zutils) 1.3
ist die cppausfü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, zgrepmit beiden Versionen von zgrep:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Wenn zgrepin 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