सभी संपीड़ित फ़ाइलों के अंदर खोजें और खोजें


9

मैं जिप, गज़िप, बीज़िप, और अन्य जैसे सभी संपीड़ित फ़ाइल संग्रह के लिए अपनी हार्ड ड्राइव को स्कैन करना चाहता हूं और कुछ फ़ाइल प्रकारों (जैसे चित्र) के लिए खोज की गई सामग्री है। एंटी-वायरस 'करते हैं, इसलिए मेरा मानना ​​है कि एक तरीका होना चाहिए।


@ रिनविंड जो संग्रह की फ़ाइलों के भीतर खोज करेगा, फाइलों की सूची के भीतर नहीं। इसमें फाइलें मिलेंगी fooलेकिन नहीं foo.png
टेराडॉन

यह जिप बम के लिए जाँच में मददगार हो सकता है! +1
शरद गौतम

जवाबों:


17

सबसे सरल तरीका संग्रह की सामग्री को सूचीबद्ध करना और प्रासंगिक एक्सटेंशन की फ़ाइलों की तलाश करना होगा। उदाहरण के लिए, एक zipफ़ाइल के साथ :

$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
  file1.jpg
  file1.png
  file2.jpg
  file2.png

-sfविकल्प बताता है zipएक संग्रह में निहित फ़ाइलों की सूची पर। फिर, grepएक के लिए दिखेगा .pngया .jpgकि पंक्ति के अंत (पर हैं $)। -Eइसलिए हम उपयोग कर सकते हैं नियमित अभिव्यक्ति बढ़ाया सक्षम, |या के रूप में और -iमिलान केस संवेदी बना देता है।

हालाँकि, प्रत्येक संग्रह उपकरण में सामग्री को सूचीबद्ध करने के लिए एक अलग कमांड है। मैंने एक पटकथा लिखी है जो अधिक से अधिक लोकप्रिय लोगों से निपट सकती है। यदि आप उस स्क्रिप्ट को सहेजते हैं list_compressed.sh, तो आप चला सकते हैं:

list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'

यह आपको सबसे आम छवि प्रकार दिखाएगा। ध्यान दें कि यह दृष्टिकोण मानता है कि फ़ाइल प्रकार फ़ाइल के एक्सटेंशन द्वारा निर्धारित किया जा सकता है। इसमें ऐसी छवि फ़ाइलें नहीं मिलेंगी जिनमें एक्सटेंशन नहीं है और यह गलत एक्सटेंशन वाली फ़ाइलों को नहीं पहचानेंगी। इससे निपटने का कोई तरीका नहीं है कि वास्तव में संग्रह से फ़ाइलों को निकाले बिना और fileउनमें से प्रत्येक पर चल रहा है।


यदि आप उन सभी अभिलेखों को ढूंढना चाहते हैं जिनमें आपकी हार्ड ड्राइव पर छवि फ़ाइलें हैं, तो उपरोक्त को इसके साथ संयोजित करें find:

find / -name '*.gz' -o -name '*.tgz' -o -name '*.zip' -print0 |
    while IFS= read -r -d '' arch; do    
        list_compressed.sh "$arch" | 
            grep -qiE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$' &&
                echo "$arch contains image(s)"
    done

खोज कमांड सभी के लिए खोज करेगा .gz, .tgzया .zipफ़ाइलें (आप जितने चाहें उतने एक्सटेंशन जोड़ सकते हैं), जिन्हें तब मेरी स्क्रिप्ट के माध्यम से पारित किया गया है। -qदबा ग्रेप सामान्य उत्पादन है, कुछ भी नहीं प्रिंट किया जाएगा। && echoसंग्रह का नाम ही अगर प्रिंट होगा grepसफल रहा था।


मेरे मूल प्रश्न के अनुसार मैं "सभी संपीड़ित फ़ाइल संग्रह के लिए मेरी हार्ड ड्राइव को स्कैन करना चाहूंगा, जैसे ज़िप, जिसमें चित्र हैं"। आपने स्वयं अभिलेखागार में देखने के लिए मदद की है, लेकिन मैं सिर्फ यह जानना चाहता हूं कि किन अभिलेखों में चित्र हैं।
6 फीट दान

@ 6ftDan क्षमा करें, मैंने मूल नहीं देखा था। कृपया अपनी पोस्ट के अर्थ को बदलने वाले किसी भी संपादन को वापस रोल या संपादित करने के लिए स्वतंत्र महसूस करें। संपूर्ण फ़ाइल सिस्टम को कैसे खोजें, इसके लिए अद्यतन उत्तर देखें।
टेराडॉन

बढ़िया, लेकिन जब से आप केस-असंवेदनशील तरीके से पकड़ रहे हैं, शायद आप केस-असंवेदनशील भी खोजना चाहते हैं?
कोस

@kos हम्म, यह काफी आसान है बस करने के लिए बदलने के -nameलिए -iname। हालांकि, इसके लिए बहुत कम बिंदु हैं, कई संपीड़न कार्यक्रमों (उदाहरण के लिए gzip) को विशिष्ट विस्तार की आवश्यकता है। GZकाम नहीं करेगा।
टेराडॉन

3

टेर्डन के रूप में उन्नत नहीं है, लेकिन यह करेगा:

निम्न कोड को सहेजें, एक फ़ोल्डर में, जहाँ आपका सभी कोड आपके जैसे ही finda.sh, या किसी अन्य नाम से रहता है :

for file in *.*; do
    if ( 7z l -slt "$file"> /tmp/$file.log); then
       echo $file:; cat /tmp/$file.log | grep -iE 'Path*'> $file.log && cat $file.log
    fi
done

फिर एक डीर में आपके सभी अभिलेखागार में थे, इसे चलाएं और यह आउटपुट है:

./finda.sh 
one.7z:
Path = one/abradabra.png
Path = one/birb.png
three.rar:
Path = three/blah.png
Path = three/qwa0g.jpg
two.zip:
Path = two/whut.png

मेरे मूल प्रश्न के अनुसार मैं "सभी संपीड़ित फ़ाइल संग्रह के लिए मेरी हार्ड ड्राइव को स्कैन करना चाहूंगा, जैसे ज़िप, जिसमें चित्र हैं"। आपने स्वयं अभिलेखागार में देखने के लिए मदद की है, लेकिन मैं सिर्फ यह जानना चाहता हूं कि किन अभिलेखों में चित्र हैं।
6 फीट दान

@ 6ftDan, मुझे लगता है कि संभव है, लेकिन इसमें थोड़ा समय लग सकता है। इस बीच, मैंने अपनी स्क्रिप्ट में कुछ सुधार किए, टेर्डन की मदद से सफेद किए।
ब्लेड 19899

ध्यान दें कि *.*केवल एक्सटेंशन के साथ फ़ाइलों का मिलान होगा। इसके अलावा, यह सभी अभिलेखागार में सभी फाइलों को सूचीबद्ध करेगा , आप किसी भी फ़ाइल प्रकार के लिए परीक्षण नहीं कर रहे हैं।
टेराडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.