http डाउनलोड में वाइल्डकार्ड के साथ wget


53

मुझे wget का उपयोग करके एक फ़ाइल डाउनलोड करने की आवश्यकता है, हालांकि मुझे नहीं पता कि फ़ाइल का नाम क्या होगा।

https://foo/bar.1234.tar.gz

मैन पेज के अनुसार , wget आपको एक FTP साइट के साथ काम करते समय ग्लोबिंग को बंद और चालू करने देता है, हालाँकि मेरे पास http url है।

वाइग का उपयोग करते समय मैं वाइल्डकार्ड का उपयोग कैसे कर सकता हूं? मैं ग्नू वेट का इस्तेमाल कर रहा हूं।

चीजें जो मैंने कोशिश की हैं।

/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp

अपडेट करें

डाउनलोड करने के लिए सर्वर पर .tar.gz में समाप्त होने वाली सभी कारणों का उपयोग करता है।

/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"

अपडेट करें

उत्तरों से, यह वाक्य रचना है जो अंततः काम करती है।

/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"

2
यह बिल्कुल वैसा नहीं है जैसा आप देख रहे हैं, लेकिन यह संबंधित है: कर्ल में बेसिक वाइल्डकार्ड्स का उपयोग करने की क्षमता होती है, जैसे:curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
हैलो वर्ल्ड

1
मेरे लिए एक पकड़ लिया था -e robots=offपैरामीटर के लिए नहीं : पालन robots.txt stackoverflow.com/a/11124664/1097104
Juuso Ohtonen

मैंने झंडे जोड़ते हुए पाया -nHऔर --cut-dirs=<number>यह उपयोगी भी था
Randall

जवाबों:


62

मुझे लगता है कि ये स्विच वही करेंगे जो आप चाहते हैं wget:

   -A acclist --accept acclist
   -R rejlist --reject rejlist
       Specify comma-separated lists of file name suffixes or patterns to 
       accept or reject. Note that if any of the wildcard characters, *, ?,
       [ or ], appear in an element of acclist or rejlist, it will be 
       treated as a pattern, rather than a suffix.

   --accept-regex urlregex
   --reject-regex urlregex
       Specify a regular expression to accept or reject the complete URL.

उदाहरण

$ wget -r --no-parent -A 'bar.*.tar.gz' http://url/dir/

15

एक अच्छा कारण यह है कि यह सीधे HTTP के साथ काम नहीं कर सकता है, और यह है कि एक URL एक फ़ाइल पथ नहीं है, हालांकि /एक सीमांकक के रूप में इसका उपयोग इसे एक जैसा दिख सकता है, और वे कभी-कभी मेल खाते हैं। 1

परंपरागत रूप से (या, ऐतिहासिक रूप से), वेब सर्वर अक्सर दर्पण निर्देशिका पदानुक्रम करते हैं (कुछ के लिए - जैसे, अपाचे - यह अभिन्न प्रकार है) और यहां तक ​​कि निर्देशिका अनुक्रमित भी एक फाइल सिस्टम की तरह प्रदान करते हैं। हालाँकि, HTTP प्रोटोकॉल के बारे में कुछ भी इसकी आवश्यकता नहीं है।

यह महत्वपूर्ण है, क्योंकि यदि आप कहने पर एक ग्लोब को लागू करना चाहते हैं, तो वह सब कुछ जो कि एक सबपथ है http://foo/bar/, जब तक कि सर्वर आपको इस तरह के साथ प्रदान करने के लिए कुछ तंत्र प्रदान नहीं करता है (जैसे कि पूर्वोक्त सूचकांक), इसमें ग्लोब को लागू करने के लिए कुछ भी नहीं हैखोज करने के लिए वहां कोई फाइल सिस्टम नहीं है। उदाहरण के लिए, सिर्फ इसलिए कि आप जानते हैं कि पृष्ठ हैं http://foo/bar/one.htmlऔर http://foo/bar/two.htmlइसका मतलब यह नहीं है कि आप फ़ाइलों और उपनिर्देशिकाओं की सूची प्राप्त कर सकते हैं http://foo/bar/। यह पूरी तरह से प्रोटोकॉल के भीतर होगा कि सर्वर के लिए 404 लौटाया जाए। या यह फ़ाइलों की सूची वापस कर सकता है। या यह आपको एक अच्छी jpg तस्वीर भेज सकता है। आदि।

इसलिए यहां ऐसा कोई मानक नहीं है जो wgetशोषण कर सके। AFAICT, wget प्रत्येक पृष्ठ में सक्रिय रूप से लिंक की जाँच करके पथ पदानुक्रम को प्रदर्शित करने का काम करता है । दूसरे शब्दों में, यदि आप पुनरावर्ती रूप से दर्पण को http://foo/bar/index.htmlडाउनलोड करते हैं index.htmlऔर फिर उन लिंक को निकालते हैं जो उस का एक उपपथ हैं। 2-A स्विच बस एक फिल्टर है कि इस प्रक्रिया में लागू किया जाता है।

संक्षेप में, यदि आप जानते हैं कि ये फ़ाइलें कहीं अनुक्रमित हैं, तो आप उस उपयोग के साथ शुरू कर सकते हैं -A। यदि नहीं, तो आप भाग्य से बाहर हैं।


1. बेशक एफ़टीपी यूआरएल एक यूआरएल भी है। हालांकि, जब मैं एफ़टीपी प्रोटोकॉल के बारे में ज्यादा नहीं जानता, तो मुझे लगता है कि यह प्रकृति पर आधारित है कि यह एक ऐसे रूप का हो सकता है जो पारदर्शी ग्लोबिंग की अनुमति देता है।

2. इसका मतलब यह है एक मान्य URL हो सकता है कि http://foo/bar/alt/whatever/stuff/कि शामिल नहीं किया जाएगा , क्योंकि यह से जुड़ा हुआ चीजों के सेट में कुछ भी करने के लिए जोड़ा किसी भी तरह से नहीं है http://foo/bar/index.html। फाइलसिस्टम के विपरीत, वेब सर्वर अपनी सामग्री के लेआउट को पारदर्शी बनाने के लिए बाध्य नहीं हैं, और न ही उन्हें सहज तरीके से करने की आवश्यकता है।


0

उपरोक्त '-ए पैटर्न' समाधान कुछ वेब पृष्ठों के साथ काम नहीं कर सकता है। यह मेरे काम के आसपास है, एक डबल wget के साथ:

  1. wget पन्ना
  2. grep पैटर्न के लिए
  3. wget फ़ाइलें)

उदाहरण: मान लीजिए कि यह एक समाचार पॉडकास्ट पृष्ठ है, और मुझे पृष्ठ के शीर्ष से 5 एमपी 3 फ़ाइलें चाहिए:

wget -nv -O- https://example/page/ |
 grep -o '[^"[:space:]]*://[^"[:space:]]*pattern[^"[:space:]]*\.mp3' |
  head -n5 | while read x; do
    sleep $(($RANDOM % 5 + 5))  ## to appear gentle and polite
    wget -nv "$x"
  done

इसमें grepडबल-कोटेड नो-स्पेस लिंक की तलाश है, जिसमें ://मेरा फ़ाइल नाम है pattern


यहाँ RANDOM क्या है?
रोकी

शेल चर, bashमैन पेज देखें । रैंडम हर बार जब इस पैरामीटर को संदर्भित किया जाता है, तो 0 और 32767 के बीच एक यादृच्छिक पूर्णांक उत्पन्न होता है।
रात्रि विश्राम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.