कर्ल .gz फ़ाइल और इसे विघटन के लिए पाइप करें


13

मैं दिए गए URL से कुछ .gzफाइलें (एनबी नहीं .tar.gzवाले) डाउनलोड करने की कोशिश कर रहा हूं और यदि कोई है, तो मौजूदा फाइलों को अधिलेखित करने के लिए उन्हें विघटित कर रहा है।

प्रत्येक व्यक्तिगत डाउनलोड के लिए, मैंने निम्नलिखित कोशिश की:

curl -O $URL | gunzip -f

हालांकि, यह काम नहीं किया क्योंकि यह इसके साथ विफल रहा gzip: stdin: unexpected end of file:। मैंने इस कमांड की एक श्रृंखला को बैश शेल स्क्रिप्ट के अंदर चलाया।

अगर मैंने कमांड को दो स्पष्ट चरणों में रखा है, तो पहले फ़ाइल को डाउनलोड करें, और फिर .gzफ़ाइल को विघटित करें , यह काम करता है।

पाइप्ड संस्करण क्यों काम नहीं करता है?


1
क्या आप सुनिश्चित हैं कि curl -Oवास्तव में मानक आउटपुट के लिए फ़ाइल को स्ट्रीम करता है? शायद आप सोच रहे हैं wget -O-?
स्टीलड्राइवर

@steeldriver आपको उत्तर कर्ल के रूप में पोस्ट करना चाहिए tar xz ...
पैंथर

वहाँ भी है --compressed, लेकिन यह केवल संकुचित प्रतिक्रियाओं के लिए काम करता है।
kenorb

जवाबों:


18

एक पाइप ( |प्रतीक द्वारा दर्शाया गया ) एक प्रक्रिया के मानक आउटपुट को दूसरे के मानक इनपुट पर भेजता है । आपके मामले में, आप एक नामित फ़ाइल का उपयोग करना चाहते हैं, इसलिए पाइप उपयुक्त नहीं है - विशेष रूप से, पाइप (इसलिए gunzipत्रुटि) के लिए कुछ भी नहीं है क्योंकि दूरस्थ सामग्री स्थानीय फ़ाइल पर जा रही है। इसके बजाय, आपको फ़ाइल का नाम निकालने की आवश्यकता होगी - उदाहरण के लिए, इसके URL से - कुछ (जैसे बैश में निर्मित स्ट्रिंग स्ट्रिपिंग क्षमताओं का उपयोग करके)

curl -O "$URL" && gunzip -f "${URL##*/}"

यदि आप एक पाइप का उपयोग करना चाहते हैं, तो इसे करने का तरीका कुछ ऐसा होगा

curl "$URL" | gunzip -c

( -Oविकल्प के बिना ) ताकि curlदूरस्थ सामग्री को स्ट्रीम किया stdoutजा सके जहां से इसे पाइप किया जा सकता है gunzip, लेकिन फिर आपको gunzipलक्ष्य के रूप में उपयुक्त असम्पीडित फ़ाइल को अधिलेखित करने के लिए आउटपुट को पुनर्निर्देशित करना होगा ।


6

डाउनलोड करते समय रीडायरेक्ट का पालन करें। कभी-कभी सुरक्षा और / या यादृच्छिक कारणों के लिए एक वेब सर्वर ने पुनर्निर्देशित किया है। यदि आप रीडायरेक्ट का पालन नहीं करते हैं, तो गलत डेटा डाउनलोड हो जाता है और पाइप किए गए डेटा को पढ़ने वाला आपका एप्लिकेशन भ्रमित हो जाता है। आप -L फ्लैग का उपयोग करके कर्ल के साथ पुनर्निर्देश कर सकते हैं।

curl -L https://example.com/mygzip.tar.gz | tar zxv
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.