संग्रह को डिस्क पर सहेजे बिना किसी संग्रह को कैसे डाउनलोड करें और कैसे निकालें?


62

मैं एक निर्देशिका के तहत एक संग्रह डाउनलोड और निकालना चाहूँगा। यहाँ है कि मैं इसे अब तक कैसे कर रहा हूँ:

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

मैं डिस्क पर संग्रह को डाउनलोड करने और निकालने के बजाय tar.gzडिस्क पर लिखे बिना करना चाहता हूं । मुझे लगता है कि इस के उत्पादन में पाइप के द्वारा ही संभव है wgetकरने के लिए tar, और देने के tarलक्ष्य, लेकिन व्यवहार में मैं नहीं जानता कि कैसे टुकड़े एक साथ रखा है।

जवाबों:


95

आप इसे wgetअपने पेलोड को स्टडआउट (ध्वज के साथ -O-) और आउटपुट को अपने स्वयं के आउटपुट (ध्वज के साथ -q) को बता कर कर सकते हैं :

wget -qO- your_link_here | tar xvz -

लक्ष्य निर्देशिका निर्दिष्ट करने के लिए:

wget -qO- your_link_here | tar xvz - -C /target/directory

अपडेट करें

अगर आपको जीएनयू होता है tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

आपको यह सब एक चरण में करने की अनुमति देनी चाहिए।

-q चुप

-O - उत्पादन करने के लिए stdout


निर्दिष्ट पथ पर होना चाहिए:wget -qO- your_link_here | tar xvz - -C /target/directory
मार्सलो

शायद सिर्फ लोगों को कहें कि वे इसके बजाय टार का उपयोग करें?
अलेक्जेंडर मिल्स

wget -qO- <url> | tar -xvz -C <target folder>गन्न टार पर काम किया।
एलिकएल्ज़िन-किलाका

14

एक अन्य विकल्प का उपयोग करना है curlजो डिफ़ॉल्ट रूप से stdout को लिखता है:

curl -s some_url | tar xvz -C /tmp

2
मुझे दूसरों की तुलना में आपका विकल्प अधिक पसंद है लेकिनcurl -s some_url | tar xvz - -C /tmp
FiftiN

1
जैसा कि FiftiN ने सुझाव दिया -> उदाहरण के लिए रिपॉजिटरी के अंदर फाइलों की एक फ़िल्टर्ड सूची देखने के लिए उपयोग किया जा सकता है:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
एलेक्स Glukhovtsev

11

इस oneliner चाल है:

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

संक्षिप्त विवरण: कोष्ठक में दाईं ओर पहले निष्पादित किया जाता है ( -qइसे चुपचाप करने के लिए छूट बताता है, -O -इसका उपयोग स्टडआउट को आउटपुट लिखने के लिए किया जाता है)।

फिर हम एक नामित पाइप <(बनाने के लिए बैश से प्रक्रिया प्रतिस्थापन ऑपरेटर का उपयोग करके एक नामित पाइप बनाते हैं । इस तरह हम एक अस्थायी फ़ाइल डिस्क्रिप्टर बनाते हैं और फिर <फाइल रिडायरेक्शन ऑपरेटर का उपयोग करके उस डिस्क्रिप्टर की सामग्री को टार के लिए निर्देशित करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.