यहाँ बहुत भ्रम है क्योंकि वहाँ सिर्फ एक नहीं है zgrep। मैं अपने सिस्टम पर दो संस्करण हैं, zgrepसे gzipऔर zgrepसे zutils। पूर्व केवल एक आवरण स्क्रिप्ट है जो कॉल करता है gzip -cdfq। यह -r, --recursiveस्विच का समर्थन नहीं करता है । 1
उत्तरार्द्ध एक c++कार्यक्रम है और यह विकल्प का समर्थन करता -r, --recursiveहै।
रनिंग zgrep --version | head -n 1से पता चलेगा कि कौन सा (यदि कोई है) डिफ़ॉल्ट है:
zgrep (gzip) 1.6
आवरण लिपि है,
zgrep (zutils) 1.3
है cppनिष्पादन।
यदि आपके पास बाद है तो आप दौड़ सकते हैं:
zgrep 'pattern' -r --format=gz /path/to/dir
वैसे भी, जैसा कि सुझाव दिया गया है, find+ के zgrepसंस्करण के साथ समान रूप से अच्छी तरह से काम करेगा zgrep:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
यदि zgrepआपके सिस्टम से गायब है (अत्यधिक संभावना नहीं है) तो आप इसके साथ प्रयास कर सकते हैं:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
लेकिन एक बड़ा नकारात्मक पहलू है: आपको पता नहीं चलेगा कि मैच कहाँ हैं क्योंकि मिलान लाइनों के लिए कोई फ़ाइल नाम नहीं है।
1: क्योंकि यह समस्याग्रस्त होगा
zgrep:zgrep - search possibly compressed files for a regular expression