2009-08-08 15 views
18

हमारी दैनिक फ़ीड फ़ाइल औसत 2 जीबी आकार में है। इन फ़ाइलों को प्रत्येक महीने के अंत में एक ज़िप फ़ाइल में संग्रहीत किया जाता है और नेटवर्क शेयर में संग्रहीत किया जाता है। समय-समय पर, मुझे उन फ़ाइलों में कुछ रिकॉर्ड खोजने की ज़रूरत है। मैं इसे दूरस्थ डेस्कटॉप से ​​साझा सर्वर से कनेक्ट करके करता हूं, फ़ाइलों को अस्थायी फ़ोल्डर में अनजिप करता हूं, grep (या PowerShell) खोज चलाता हूं, और फिर temp फ़ोल्डर को हटा देता हूं। अब, क्योंकि हमारा सर्वर डिस्क स्पेस में कम चल रहा है, अब इसे सभी को अस्थायी फ़ोल्डर में अनजिप करने के लिए पुनः संयोजित नहीं किया गया है। डिस्क या नेटवर्क संसाधनों पर न्यूनतम प्रभाव वाले उन ज़िप्ड फ़ाइलों पर रेगेक्स खोज करने का एक प्रभावी तरीका क्या है?मैं ज़िप्ड टेक्स्ट फ़ाइल में टेक्स्ट पैटर्न के लिए कैसे grep कर सकता हूं?

उत्तर

22

zgrep। यदि आप विंडोज़ पर हैं, तो आप GnuWin डाउनलोड कर सकते हैं जिसमें zgrep का विंडोज पोर्ट शामिल है।

+1

और केवल स्पष्टता के लिए, यह "नियमित" ज़िप फ़ाइलों के साथ-साथ 'gzip' फ़ाइलों के भीतर भी खोज करता है। – Nate

+1

@Nate पूरी तरह से सच नहीं है। यह gzip का उपयोग करेगा, जिसमें 'नियमित' ज़िप फ़ाइलों के साथ समस्याएं हो सकती हैं, जिससे यह संग्रह में केवल पहली ज़िप फ़ाइल को अनजिप कर सकती है। – dstibbe

2

पावरहेल समुदाय एक्सटेंशन (PSCX) में कुछ ज़िप संबंधित कमांडलेट हैं। मुझे नहीं लगता कि वे वही करेंगे जो आप चाहते हैं (हालांकि मैं इसके बारे में पूरी तरह गलत हो सकता हूं)। इसके बजाय मैं नेट ज़िप लाइब्रेरी (DotNetZip) का उपयोग करूंगा जो आपको अनिवार्य रूप से किसी संग्रह में फ़ाइलों के नामों की सूची बनाने की अनुमति देता है, फिर केवल वही निकालें जो आप चाहते हैं। लिनक्स पर

3

PowerShell Community Extensions (पीएससीएक्स) में Read-Archive और Expand-Archive cmdlets शामिल हैं, लेकिन (अभी तक?) में नेविगेशन प्रदाता शामिल नहीं है जो आप बहुत सरल बनाना चाहते हैं। उस ने कहा, आप Read-Archive और Expand-Archive का उपयोग कर सकते हैं। इस अनचाहे बिट

Read-Archive -Path foo.zip -Format Zip | ` 
    Where-Object { $_.Name -like "*.txt" } | ` 
     Expand-Archive -PassThru | select-string "myRegex" 

आपको पूरे संग्रह को निकाले बिना खोज करने देगा।

संबंधित मुद्दे