Ada banyak kebingungan di sini karena tidak hanya ada satu zgrep. Saya memiliki dua versi di sistem saya, zgrepdari gzipdan zgrepdari zutils. Yang pertama hanyalah skrip pembungkus yang memanggil gzip -cdfq. Itu tidak mendukung -r, --recursivesaklar. 1
Yang terakhir adalah c++program yang dan mendukung para -r, --recursivepilihan.
Menjalankan zgrep --version | head -n 1akan mengungkapkan yang mana (jika ada) dari mereka adalah default:
zgrep (gzip) 1.6
adalah skrip wrapper,
zgrep (zutils) 1.3
adalah cppexecutable.
Jika Anda memiliki yang terakhir, Anda dapat menjalankan:
zgrep 'pattern' -r --format=gz /path/to/dir
Bagaimanapun, seperti yang disarankan, find+ zgrepakan bekerja dengan baik dengan versi zgrep:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Jika zgrephilang dari sistem Anda (sangat tidak mungkin), Anda dapat mencoba:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
tetapi ada kelemahan utama: Anda tidak akan tahu di mana pertandingan tersebut karena tidak ada nama file yang ditambahkan ke baris yang cocok.
1: karena akan bermasalah
zgrep:zgrep - search possibly compressed files for a regular expression