किसी फ़ोल्डर में सभी .zip फ़ाइलों की सामग्री और विशिष्ट फ़ाइल के लिए grep कैसे सूचीबद्ध करें?


28

मेरे पास 348 ज़िप फाइलें हैं और मैं एक ऐसी फाइल ढूंढना चाहता हूं जो ज़िप फाइलों में से एक है, unzip -lवाइल्ड कार्ड के साथ काम नहीं करती है?

मैं सभी .zipफाइलों की सामग्री और grepज़िप्स में निहित सभी फाइलों की विलय सूची के माध्यम से कैसे सूची दे सकता हूं ?

जवाबों:


17

उपयोग करना zipinfoयहाँ एक अच्छा समाधान है। हालाँकि, सामान्य रूप से जब भी आप फ़ाइलों की सूची के लिए एक कमांड लागू करना चाहते हैं और कमांड फ़ाइलों की सूची को स्वीकार नहीं करता है, तो आप एक forलूप का उपयोग कर सकते हैं :

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

यदि आप जिस फ़ाइल को खोज रहे हैं, उसमें रिक्त स्थान हैं जैसे:, your filegrep नियमित अभिव्यक्ति में आपको हर स्थान को पीछे की ओर भागने जैसी ज़रूरत होती है grep "\.zip\|your\ file"


पूरी तरह से एकमात्र समस्या यह है कि यह जिप का नाम नहीं दिखाता है,
एडुआर्ड फ्लोरिंसक्यू

मैंने आपको पोस्ट किया और नियमित रूप से एक्सप्रेशन के लिए फ़ाइल नाम भी जोड़ा जहाँ सेटअप पाया जाता है, +1 और स्वीकार करें
Eduard Florinescu

अरे हां, मैं तर्क के आसपास के उद्धरणों को भूल गया हूं unzipकि यह कितना शर्मनाक है।
कोनराड रुडोल्फ

1
@JaySullivan इस कोड का उपयोग न करें, यह रिक्त स्थान वाले रास्तों के लिए विफल हो जाएगा। कभी भी ls के आउटपुट को पाइप न करें। आप इसके बजाय उपयोग कर सकते हैं find
कोनराड रुडोल्फ

12

आप उपयोग कर सकते हैं zipinfo। यह डिफ़ॉल्ट Ubuntu इंस्टालेशन में शामिल है। अधिक जानकारी के लिए मैनुअल पेज की जाँच करें ।

उदाहरण के लिए, setupवर्तमान निर्देशिका में ज़िप फ़ाइलों के एक समूह में एक पैटर्न देखने के लिए , इस कमांड का उपयोग करें:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

मुझे हर ज़िप के लिए एक caution: filename not matched: case1.zip... caution: filename not matched: case348.zipदो उबंटू ओएस, 11.10 और 12.04 पर परीक्षण किया गया।
एडुआर्ड फ्लोरिंसक्यू

@EduardFlorinescu अपडेट किए गए उत्तर का प्रयास करें। हालांकि जवाब मेरे लिए काम कर रहा था
अनवर

समस्या यह है कि फ़ाइल में यह हो सकता है setupऔर यह एक ही त्रुटि डालता है, हालाँकि यह इस तरह काम करता है:zipinfo -l * | grep "setup"
Eduard Florinescu

मैंने उत्तर संपादित किया। मुझे लगता है कि अब यह अधिक मजबूत है
अनवर

1
धन्यवाद, प्रयास के लिए +1, लेकिन फिर भी यह काम नहीं करेगा यदि ज़िप फ़ाइल के नाम में रिक्त स्थान है।
एडुआर्ड फ्लोरिंसकु

6

ज़िप संग्रह में फ़ाइलों को सूचीबद्ध करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं।

unzip -l

एक संपीड़ित संग्रह को प्राप्त करने के लिए आपको उस प्रकार के संग्रह प्रारूप के साथ काम करने के लिए निर्मित संपीड़ित संग्रह उपयोगिताओं का उपयोग करना चाहिए।

ज़िप अभिलेखागार के लिए:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

टार अभिलेखागार के लिए:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

कुछ अन्य उपकरण हैं जो अभिलेखागार के साथ भी काम करते हैं। आप एक ही काम करने के लिए बाहर grep में डाल सकते हैं।

zcat
zcat my.archive.zip | grep "some text"

या आप इन उपकरणों की खोज कार्यक्षमता का उपयोग कर सकते हैं

zless
zmore
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.