Url के आधार पर कस्टम फ़ाइल नाम पर wget या कर्ल का आउटपुट लिखें


12

उदाहरण के लिए मेरे पास एक लिंक है http://www.abc.com/123/def/ghi/jkl.mno। मैं इसका उपयोग करके डाउनलोड करना चाहता हूं wgetया curlआउटपुट फ़ाइल का नाम प्राप्त करना चाहता हूं def_ghi_jkl.mno, जहां def_ghiलिंक से भाग लिया जाता है।

मैं इस wgetकमांड को कई फाइलों को डाउनलोड करने के लिए एक स्क्रिप्ट में रखूंगा ताकि यह आउटपुट फाइल को स्पष्ट रूप से नाम न दे सके।

जवाबों:


15

curlहै -o, --output विकल्प जो एक तर्क फ़ाइल नाम उत्पादन का संकेत के बजाय करने के लिए लिखा जाना चाहिए लेता है stdout। यदि आप URL में तत्वों का उपयोग कर रहे हैं {}या []उन्हें घेर रहे हैं (आमतौर पर कई दस्तावेज़ लाने के लिए), तो आप #फ़ाइल नाम निर्दिष्टक में एक नंबर का उपयोग कर सकते हैं । प्रत्येक ऐसे चर को URL के लिए संबंधित स्ट्रिंग के साथ प्रतिस्थापित किया जाएगा। कई फ़ाइलों को लाने के लिए, टोकन के अंदर अल्पविराम से अलग सूची जोड़ें {}। यदि URL के कुछ हिस्सों को अनुक्रमिक संख्या में लाया जाता है, तो आप इसके साथ एक सीमा निर्दिष्ट कर सकते हैं []

उदाहरण:

  curl http://www.abc.com/123/{def}/{ghi}/{jkl}.mno -o '#1_#2_#3.mno'

विकल्प तर्क के आसपास के उद्धरणों पर ध्यान दें (जब तक कि फ़ाइल नाम एक विस्तारित चर के साथ शुरू न हो जाए) की आवश्यकता नहीं है। यह आउटपुट फ़ाइल में परिणाम होना चाहिए def_ghi_jkl.mno

  curl http://www.abc.com/123/{def}/{ghi}/{jkl,pqr,stu}.mno -o '#1_#2_#3.mno'

यह आउटपुट फ़ाइलों में परिणाम होना चाहिए def_ghi_jkl.mno, def_ghi_pqr.mnoऔर def_ghi_stu.mno

 curl http://www.abc.com/123/{def}/{ghi}/[1-3].mno -o '#1_#2_#3.mno'

यह आउटपुट फ़ाइलों में परिणाम चाहिए def_ghi_1.mno, def_ghi_2.mno, def_ghi_3.mno


2

wgetएक स्विच -O(लंबा रूप --output-document) है जो आपको फ़ाइल के नाम को बचाने के लिए निर्दिष्ट करने की अनुमति देता है। (निश्चित रूप से कर्ल में कुछ समान है।) तो आप कर सकते हैं:

wget -O def_ghi_jkl.mno http://www.abc.com/123/def/ghi/jkl.mno

और यह वही करेगा जो आप चाहते हैं।

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

ध्यान दें कि -Oसभी के रूप में एक ही नहीं है -o, जो नामित फ़ाइल के लिए अपने स्वयं के आउटपुट लिखते हैं ।


यह एक स्क्रिप्ट का हिस्सा है, स्पष्ट रूप से उस अभ्यस्त काम की तरह फ़ाइल नाम देना।
gvz

@ user47567 क्यों नहीं? इस तथ्य के बारे में क्या कि एक स्क्रिप्ट से wget या कर्ल कहा जा रहा है, यह अव्यवहारिक बनाता है? (और वास्तव में, अगर आपके पास इस तरह की अड़चनें हैं कि उत्तर क्या काम करेंगे, तो यह जानकारी वास्तव में शुरू से ही प्रश्न में चली जानी चाहिए।)
एक CVn

0

यहाँ कुछ बैश प्रतिस्थापन है

link="http://www.abc.com/123/def/ghi/jkl.mno"
OutputFile=$( echo ${link:23: 23}| tr "/" "_" )
echo $OutputFile
def_ghi_jkl.mno

{$link:23: 23}निकाल देंगे " http://www.abc.com/123/ " यह है ${parameter:offset:length}, तो trबदल देगा /करने के लिए _

तो अब आप आसानी से विग या कर्ल के साथ उपयोग कर सकते हैं

wget $link  -O $OutputFile

इसके अलावा, हम awk का उपयोग कर सकते हैं, यह इनपुट स्ट्रिंग से अंतिम तीन फाइल निकालेगा:

OutputFile=$( echo $link | awk -F/ 'BEGIN{OFS="_"}{ print $( NF-2),$(NF - 1 ),$NF}' )

0

आपके द्वारा आवश्यक फ़ाइल नाम को wgetस्वयं प्राप्त नहीं किया जा सकता है, इसलिए इसे शेल स्क्रिप्ट द्वारा नियंत्रित किया जाना चाहिए:

$ url='http://www.example.com/123/def/ghi/jkl.mno'
$ outFile=$(echo "$url" | cut -d /  -f 5- | tr / _)
$ echo $outFile 
def_ghi_jkl.mno
$ wget "$url" -O "$outFile"

या यदि आप इसे एक पंक्ति के रूप में पसंद करते हैं:

wget "$url" -O "$(echo "$url" | cut -d /  -f 5- | tr / _)"

0

यदि आप कर्ल पसंद करते हैं, तो सबसे सीधा तरीका है:

curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"

फ़ाइल नाम: डाउनलोड की गई फ़ाइल का नाम

फ़ाइल आईडी: प्रारूप में Google ड्राइव के वेब दृश्य में फ़ाइल की आईडी https://drive.google.com/file/d/ फ़ाइल आईडी / दृश्य

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