Burada çok fazla karışıklık var çünkü sadece bir tane yok zgrep. Benim sistemde iki sürümü vardır zgrepden gzipve zgrepdan zutils. İlki, çağıran yalnızca bir sarmalayıcı komut dosyasıdır gzip -cdfq. -r, --recursiveAnahtarı desteklemiyor . 1
ikincisi bir olan c++programı ve destekler-r, --recursive seçeneği.
Koşu zgrep --version | head -n 1, hangisinin (varsa) varsayılanı olduğunu ortaya çıkarır:
zgrep (gzip) 1.6
sarıcı komut dosyası
zgrep (zutils) 1.3
olan cppçalıştırılabilir.
İkincisi varsa koşabilirsiniz:
zgrep 'pattern' -r --format=gz /path/to/dir
Yine de, önerildiği gibi, find+ aşağıdakilerden zgrepbiriyle eşit derecede iyi çalışacaktır zgrep:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Eğer zgrepsizinle deneyebilirsiniz (yüksek ihtimal) sisteminizden eksik:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
ancak büyük bir dezavantajı var: eşleşen satırlara önceden hazırlanmış bir dosya adı olmadığı için kibritlerin nerede olduğunu bilemezsiniz.
1: çünkü sorunlu olurdu
zgrep:zgrep - search possibly compressed files for a regular expression