जवाबों:
यदि आप वास्तव में उन्हें समानांतर में खोलना चाहते हैं, तो आप कर सकते हैं
for i in *zip; do unzip "$i" & done
हालाँकि, N .zip फ़ाइलों के लिए N प्रक्रियाओं को लॉन्च करेगा और आपके सिस्टम पर बहुत भारी हो सकता है। अधिक नियंत्रित दृष्टिकोण के लिए, एक बार में केवल 10 समानांतर प्रक्रियाओं को शुरू करना, यह प्रयास करें:
find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
लॉन्च की गई समानांतर प्रक्रियाओं की संख्या को नियंत्रित करने के लिए, -P
जो भी आप चाहते हैं उसे बदलें । यदि आप उपनिर्देशिकाओं में पुनरावृत्ति नहीं करना चाहते हैं, तो इसके बजाय यह करें:
find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
वैकल्पिक रूप से, आप टिप्पणियों और चलाने में @OleTange द्वारा सुझाए गए GNU को समानांतर स्थापित कर सकते हैं
parallel unzip ::: *zip
-exec
या -execdir
पाइपिंग के बजाय xargs
। न केवल यह समझना आसान है, बल्कि यह कम त्रुटि वाला भी है और कम सिस्टम संसाधनों का उपयोग करता है। find . -name '*.zip' -exec unzip {} ';'
(आपको अर्ध-उपनिवेश का उद्धरण देना होगा।)
-exec \;
(आप अर्धविराम से बच सकते हैं, उद्धरण की कोई आवश्यकता नहीं है), प्रत्येक कमांड क्रमिक रूप से चलेगा। -exec +
बेहतर है, लेकिन यह यहाँ काम नहीं करेगा क्योंकि यह unzip
काम नहीं करता है।
जीएनयू समानांतर आदेश में अच्छी तरह से बात के इस प्रकार के लिए उपयुक्त है। बाद:
$ sudo apt-get install parallel
फिर
ls *.zip | parallel unzip
यह आपके पास जितने कोर का उपयोग करेगा, प्रत्येक कोर को एक अनज़िप के साथ व्यस्त रखेगा, जब तक कि वे सभी काम न करें।
echo *.zip
अतिरिक्त जानकारी में एक संभावित एलिस उर्फ को रोकने के बजाय इसका उपयोग करना बेहतर विचार है । हालाँकि, यह @ गुरु के उत्तर के समान ही है, यह व्हॉट्सएप युक्त फ़ाइल नामों पर टूटता है।
xargs
GNU समानांतर के विपरीत अंतरिक्ष / टैब / उद्धरण वाले फ़ाइल नामों पर नहीं टूटता है। केवल अगर फ़ाइल नाम में नई सुर्खियाँ हैं तो आपको अतिरिक्त देखभाल करनी होगी। उदाहरण के लिए उपयोग करके:parallel unzip ::: *.zip
echo
करना उतना ही बुरा है जितना उपयोग करना ls
। ग्लोबिंग और थोड़ी देर का लूप सबसे सुरक्षित है।
यदि .zip
आपके फ़ोल्डर में कई फाइलें हैं और आप उन सभी को हटाना चाहते हैं तो टर्मिनल खोलें और उपयोग करके अपने फ़ोल्डर में जाएं:
cd <path_to_folder>
अब इस कमांड का प्रयोग अपनी सभी .zip
फाइल को डिकम्प्रेस करने के लिए करें :
ls *.zip | xargs -n1 unzip
echo *.zip
बजाय एक संभव विचार का उपयोग करने के लिए ls
अतिरिक्त जानकारी को चुपके से रोकने के लिए उपयोग करना बेहतर है , हालांकि यह अभी भी व्हाट्सएप समस्या को ठीक नहीं करता है।
ls
स्क्रिप्ट के लिए आउटपुट पर कभी भी निर्भर न करें , क्योंकि इसका आउटपुट संस्करणों के बीच अच्छी तरह से परिभाषित नहीं है। इसके बजाय @terdon से उत्तर देखें क्योंकि यह इस समाधान की सभी समस्याओं को हल करता है।
आप इस -exec
तरह से पा सकते हैं ,
find . -name "*.zip" -exec unzip {} \;
यह काम करेगा अगर फ़ाइल के नाम में जगह है।
unzip \*.zip
या unzip '*.zip'
स्पष्ट unzip *.zip
काम नहीं करता है, क्योंकि शेल इसका विस्तार करता है unzip foo.zip bar.zip ...
और unzip
ज़िप फ़ाइल के रूप में पहले फ़ाइल नाम की व्याख्या करता है, और निम्न फ़ाइल का नाम उस ज़िप फ़ाइल से निकालने के लिए फ़ाइलों के रूप में होता है।
हालांकि, unzip
यूनिक्स कमांड्स के बीच यह थोड़ा असामान्य है कि यह अपने स्वयं के ग्लोब विस्तार करता है। यदि *
शेल द्वारा विस्तार नहीं किया गया है, तो unzip इसे करेगा, और सभी परिणामी फ़ाइलनामों को जिप फ़ाइलों के रूप में संसाधित करने के लिए अलग करेगा। तो इस विशेष मामले में, एक for
लूप xargs
या इस तरह से दूर हो सकता है ।