मैं जिप, गज़िप, बीज़िप, और अन्य जैसे सभी संपीड़ित फ़ाइल संग्रह के लिए अपनी हार्ड ड्राइव को स्कैन करना चाहता हूं और कुछ फ़ाइल प्रकारों (जैसे चित्र) के लिए खोज की गई सामग्री है। एंटी-वायरस 'करते हैं, इसलिए मेरा मानना है कि एक तरीका होना चाहिए।
मैं जिप, गज़िप, बीज़िप, और अन्य जैसे सभी संपीड़ित फ़ाइल संग्रह के लिए अपनी हार्ड ड्राइव को स्कैन करना चाहता हूं और कुछ फ़ाइल प्रकारों (जैसे चित्र) के लिए खोज की गई सामग्री है। एंटी-वायरस 'करते हैं, इसलिए मेरा मानना है कि एक तरीका होना चाहिए।
जवाबों:
सबसे सरल तरीका संग्रह की सामग्री को सूचीबद्ध करना और प्रासंगिक एक्सटेंशन की फ़ाइलों की तलाश करना होगा। उदाहरण के लिए, एक 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
सफल रहा था।
-name
लिए -iname
। हालांकि, इसके लिए बहुत कम बिंदु हैं, कई संपीड़न कार्यक्रमों (उदाहरण के लिए gzip) को विशिष्ट विस्तार की आवश्यकता है। GZ
काम नहीं करेगा।
टेर्डन के रूप में उन्नत नहीं है, लेकिन यह करेगा:
निम्न कोड को सहेजें, एक फ़ोल्डर में, जहाँ आपका सभी कोड आपके जैसे ही 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
*.*
केवल एक्सटेंशन के साथ फ़ाइलों का मिलान होगा। इसके अलावा, यह सभी अभिलेखागार में सभी फाइलों को सूचीबद्ध करेगा , आप किसी भी फ़ाइल प्रकार के लिए परीक्षण नहीं कर रहे हैं।
foo
लेकिन नहींfoo.png
।