Burada çok fazla karışıklık var çünkü sadece bir tane yok zgrep
. Benim sistemde iki sürümü vardır zgrep
den gzip
ve zgrep
dan zutils
. İlki, çağıran yalnızca bir sarmalayıcı komut dosyasıdır gzip -cdfq
. -r, --recursive
Anahtarı 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 zgrep
biriyle eşit derecede iyi çalışacaktır zgrep
:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Eğer zgrep
sizinle 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