यहाँ बहुत भ्रम है क्योंकि वहाँ सिर्फ एक नहीं है 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