ब्रेस सिंटैक्स के साथ कर्ल डाउनलोड कई फाइलें


17

मैं निम्नलिखित सिंटैक्स द्वारा दो फ़ाइलों को डाउनलोड करने का प्रयास कर रहा हूं:

curl -O http://domain/path/to/{file1,file2}

समस्या यह है कि केवल पहली फ़ाइल वास्तव में स्थानीय रूप से सहेजी गई है, और दूसरी बस स्टैडआउट के लिए मुद्रित की गई थी।

मुझे एहसास हुआ कि अगर मैं -Oइसे जोड़ता हूँ तो यह ठीक काम करता है:

curl -OO http://domain/path/to/{file1,file2}

लेकिन क्या यह अव्यवहारिक नहीं है यदि फाइलों की संख्या बहुत बड़ी हो जाती है? उदाहरण के लिए,

curl -O http://domain/path/to/file[1,100]

मेरा सवाल यह है कि क्या वास्तव में एक साथ कई व्यक्तिगत फ़ाइलों को डाउनलोड करने का कोई तरीका नहीं है curl(सही संख्या को जोड़े बिना -O)?


1
लूप के लिए या इसके बजाय wget का उपयोग क्यों नहीं किया जाता है?
रुई एफ रिबेरो

1
@ रुईएफबीबेरो (1) हां, मैं लूप का उपयोग कर सकता हूं। मैं बस उत्सुक हूँ अगर curlइसे प्राप्त कर सकते हैं। (2) मैं न केवल HTTP (s), FTP प्रोटोकॉल, उदाहरण के लिए SFTP पर विचार कर रहा हूं।
नैट्री

मेरा मतलब है कि इस तरह के एक शक्तिशाली उपकरण होने के नाते, curlबस इस मुश्किल-से-कठिन कार्यक्षमता में विफल क्यों हो जाता है?
नैट्री

1
बस यह स्पष्ट करने के लिए कि {}और [](और भी ) *और ?सिंटैक्स शेल ग्लोबिंग / विस्तार है, curlकभी भी उन्हें देखने के लिए नहीं मिलता है, यह वैसा ही हैcurl url1 url2
vonbrand

wget एसएसएल को नहीं संभालता है
माइक डब्ल्यूडब्ल्यू

जवाबों:


9

अपडेट: इसे कर्ल 7.19.0 में लागू किया गया है। देखिए @Besworks जवाब।

मैन पेज के अनुसार, कई O usings को छोड़कर मूल फ़ाइल नाम को रखने का कोई तरीका नहीं है। वैकल्पिक रूप से आप अपने खुद के फ़ाइल नामों का उपयोग कर सकते हैं:

curl http://{one,two}.site.com -o "file_#1.txt"

जिसका परिणाम http://one.site.comमें सहेजा जा रहा file_one.txtहै और http://two.site.comकरने के लिए सहेजा जा रहा है file_two.txt

या यहां तक ​​कि कई चर की तरह

curl http://{site,host}.host[1-5].com -o "#1_#2"

जिसके परिणामस्वरूप में http://site.host1.comबचाया जा रहा है site_1, और इतने पर http://host.host1.comबचाया जा रहा है host_1


या आप कुछ ऐसा कर सकते हैंcurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
मैक्स कोपलान

23

मुझे एहसास है कि इस सवाल का पहले से ही एक स्वीकृत उत्तर है, लेकिन मुझे लगता है कि मुझे यह बताना चाहिए कि वास्तव में ऐसा करने का एक तरीका है।

--remote-name-allविकल्प के रूप में यदि आप का इस्तेमाल किया व्यवहार करने के लिए कर्ल बताता है -Oया --remote-nameप्रत्येक फ़ाइल के लिए।

https://curl.haxx.se/docs/manpage.html#--remote-name-all

यह विकल्प 7.19.0 संस्करण के बाद से उपलब्ध है

https://curl.haxx.se/changes.html#7_19_0


0

कर्ल के साथ कई फ़ाइलों को डाउनलोड करने का एक वैकल्पिक तरीका है:

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

नोट : अनिवार्य स्थान का उपयोग विभिन्न URL को डिलीट करने के लिए किया जाता है।

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