2011-08-20 13 views
15

कैसे इस तरह की एक पाइप ज़िप फ़ाइल अनज़िप करने पर कोई भी विचार ("wget ​​-qO-" से) एक पाइप ज़िप फ़ाइल अनज़िप करने के लिए:बैश - कैसे

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip 

मैं एक निर्देशिका में फाइल को अनज़िप करने के लिए कामना की , जैसे हम एक सामान्य फ़ाइल के साथ करते थे:

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | unzip -d ~/Desktop 
+0

का उपयोग करते हैं सवाल मान्य है अगर आप WordPress के साथ काम करने के लिए Git का उपयोग कर रहे हैं, वहाँ अब उनमें से प्रत्येक के एक Git दर्पण है। अगर यह आपका मामला नहीं है तो मेरी टिप्पणी को अनदेखा करें :) अन्यथा अपने इंस्टॉलेशन को स्वचालित करने के लिए इस तरह के पथ का उपयोग कैसे करें और https://github.com/wp-plugins – renoirb

उत्तर

6

wget -qO- -O tmp.zip http://downloads.wordpress.org/plugin/akismet.2.5.3.zip && unzip tmp.zip && rm tmp.zip

+2

अगली कमांड केवल तभी शुरू होती है जब पिछली बार सफलतापूर्वक समाप्त हो जाए। धन्यवाद – Roger

+1

यह एक पाइप तरीके से डी ज़िप निकालने नहीं है। आपके प्रस्ताव के साथ आपको अधिक डिस्क स्थान का उपयोग करने की आवश्यकता है, और इसे पहनना आवश्यक है (यदि फ़ाइलें बड़ी हैं तो एसएसडी में महत्वपूर्ण)। डाउनलोड और निष्कर्षण को सीधे समानांतर करने के लिए यह और भी अधिक कुशल है। –

3

मैं funzip पर एक नज़र डालें चाहते हैं (http://www.info-zip.org/mans/funzip.html)। इसके लिए आदमी पेज नोट्स,

...filter for extracting from a ZIP archive in a pipe 

माफ करना, मैं एक उदाहरण नहीं है, लेकिन ऐसा लगता है यह लिनक्स unzip उपयोगिता के साथ आता है।

+1

का उपयोग करके गिट सबमिशन/संगीतकार का उपयोग करने के लिए सिर का उपयोग कैसे करें यह केवल पहली फ़ाइल को डंप करता है। फ़ाइल तर्क के बिना funzip फ़िल्टर के रूप में कार्य करता है; यानी, यह मानता है कि एक ज़िप संग्रह (या एक gzip'd (1) फ़ाइल) मानक इनपुट में पाइप किया जा रहा है, और यह संग्रह से stdout से ** पहला सदस्य ** निकालता है। –

6

निम्नलिखित बैश में काम नहीं करते हैं, यह zsh में काम करेंगे। कई zsh उपयोगकर्ताओं यहाँ खत्म हो सकता है के बाद से, यह अभी भी उपयोगी हो सकता है:

unzip =(wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip) 
+1

ध्यान दें कि यह अनजिप चलाने से पहले पूरी फ़ाइल डाउनलोड करेगा, जो मूल प्रश्न नहीं है। –

+1

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

+1

हालांकि यह सच है कि फ़ाइल के अंत में एक अनुक्रमणिका है, जिसमें "आधिकारिक" जानकारी है जिस पर संग्रह से फ़ाइलों को हटा दिया गया है (प्रत्येक विलोपन पर इसे पुन: उत्पन्न करने की आवश्यकता के बिना), मैं bsdtar के साथ एक पाइपलाइन तरीके से एक साधारण ज़िप सफलतापूर्वक निकाल सकता हूं, क्योंकि प्रत्येक फ़ाइल वास्तव में प्रत्येक फ़ाइल से पहले है। bsdtar शायद संग्रह को संशोधित करने के मामले में खराब परिणाम देगा ("प्रेत" फाइलें दिखाई देंगी, क्योंकि यह संग्रह के अंत तक ज्ञात नहीं है जो नवीनतम संस्करण हैं)। –

19

ज़िप फ़ाइल स्वरूप एक निर्देशिका संग्रह के अंत में (इंडेक्स) भी शामिल है। यह निर्देशिका कहती है, जहां संग्रह के भीतर प्रत्येक फ़ाइल स्थित है और इस प्रकार पूरे संग्रह को पढ़ने के बिना त्वरित, यादृच्छिक पहुंच की अनुमति देता है।

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

संग्रह के अंत में निर्देशिका केवल स्थान नहीं है जहां फ़ाइल मेटा जानकारी संग्रह में संग्रहीत है। इसके अतिरिक्त, व्यक्तिगत प्रविष्टियों में यह जानकारी स्थानीय फ़ाइल शीर्षलेख में, अनावश्यक उद्देश्यों के लिए भी शामिल है।

हालांकि नहीं हर ज़िप decompressor स्थानीय फ़ाइल हेडर का उपयोग करेगा जब सूचकांक उपलब्ध नहीं है, टार और सीपीआईओ सामने कर सकते हैं (bsdtar और bsdcpio उर्फ) libarchive को समाप्त होता है और ऐसा करेंगे जब एक पाइप के माध्यम से पढ़ना, जिसका अर्थ है कि निम्नलिखित संभव है:

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | bsdtar -xvf- -C ~/Desktop 
0

बस, zcat

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | zcat >> myfile.txt 
+0

यह एक ओ <- याद है – SepGuest