पुनरावृत्ति के साथ एक निर्देशिका लाने के लिए wget का उपयोग करके इसमें मनमानी फ़ाइलों के साथ


573

मेरे पास एक वेब डायरेक्टरी है जहां मैं कुछ कॉन्फिग फाइलों को स्टोर करता हूं। मैं उन फ़ाइलों को नीचे खींचने और उनकी वर्तमान संरचना को बनाए रखने के लिए wget का उपयोग करना चाहूंगा। उदाहरण के लिए, दूरस्थ निर्देशिका जैसी दिखती है:

http://mysite.com/configs/.vim/

.vim कई फाइलें और निर्देशिका रखता है। मुझे लगता है कि wget का उपयोग कर ग्राहक पर दोहराने के लिए चाहते हैं। ऐसा करने के लिए विंग झंडे के सही कॉम्बो को खोजने के लिए प्रतीत नहीं हो सकता। कोई विचार?

जवाबों:


986

आपको -np/ ( बेशक, / के अलावा ) --no-parentविकल्प को पास करना होगा, अन्यथा यह मेरी साइट पर डायरेक्टरी इंडेक्स में लिंक को पेरेंट डायरेक्टरी में फॉलो करेगा। तो कमांड इस तरह दिखेगा:wget-r--recursive

wget --recursive --no-parent http://example.com/configs/.vim/

स्वतः-जनरेट की गई index.htmlफ़ाइलों को डाउनलोड करने से बचने के लिए, -R/ --rejectविकल्प का उपयोग करें :

wget -r -np -R "index.html*" http://example.com/configs/.vim/

52
add -nH (कट आउट होस्टनाम) --cut-dirs = X (एक्स निर्देशिका को काटता है)। X- के लिए निर्देशिकाओं को मैन्युअल रूप से गिनना थोड़ा कष्टप्रद है।
21

3
W3.org/History/1991-WWW-NeXT/Im कार्यान्वयन के लिए इनमें से कोई काम क्यों नहीं करता है ? यह केवल robots.txt
matteo

31
@matteo क्योंकि robots.txt संभवतः वेबसाइट को क्रॉल करना अस्वीकार कर देता है। आपको क्रॉलिंग के लिए -e रोबोट = बंद करना चाहिए।

Add -X / निरपेक्ष / पथ / / फ़ोल्डर को एक विशेष निर्देशिका को बाहर करने के लिए
विष्णु नारायण

3
यदि आप संपूर्ण सामग्री डाउनलोड नहीं करना चाहते हैं, तो आप उपयोग कर सकते हैं: -l1 केवल निर्देशिका (example.com को आपके मामले में) डाउनलोड करें -l2 निर्देशिका और सभी स्तर 1 सबफ़ोल्डर डाउनलोड करें ('example.com/something') लेकिन नहीं 'example.com/somthing/foo') इत्यादि। यदि आप कोई -l विकल्प नहीं डालते हैं, तो wl -l 5 का स्वचालित रूप से उपयोग करेगा। यदि आप -l 0 डालते हैं तो आप पूरे इंटरनेट को डाउनलोड कर लेंगे, क्योंकि wget हर लिंक का अनुसरण करेगा जो इसे पाता है। stackoverflow.com/a/19695143/6785908
इतना यादृच्छिक-ड्यूड

123

किसी निर्देशिका को पुनरावर्ती रूप से डाउनलोड करने के लिए, जो index.html * फ़ाइलों को अस्वीकार करता है और hostname, जनक निर्देशिका और संपूर्ण निर्देशिका संरचना के बिना डाउनलोड करता है:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

मुझे यह काम करने के लिए नहीं मिल सकता है: wget -r -nH -cut-dirs = 3 --no-parent --reject = "index.html *" w3.org/History/1991-WWW-NeXT/Imation - -cut-dirs = 2 या तो काम नहीं करता है यह केवल robots.txt डाउनलोड करता है जो वास्तव में रूट फ़ोल्डर में है। क्या मुझे याद आ रही है?
Matteo

34
@matteo जोड़ने का प्रयास करें: -e रोबोट = बंद
पॉल जे

रिकर्सिवली एक निर्देशिका में सभी निर्देशिकाओं प्राप्त करने के लिए, का उपयोग करें wget -r राष्ट्रीय राजमार्ग --reject = "index.html *" mysite.io:1234/dir1/dir2
प्रशांत गणेशन

115

किसी और के लिए जो समान मुद्दे हैं। Wget इस प्रकार है robots.txtजो आपको साइट को हथियाने की अनुमति नहीं दे सकता है। कोई चिंता नहीं, आप इसे बंद कर सकते हैं:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html


जब आप robots.txt को अनदेखा कर रहे हैं तो आपको अपने अनुरोधों को कम से कम करना चाहिए। इस उत्तर में सुझाया गया व्यवहार अत्यधिक उद्दंड है।
कोई भी

@ कोई नहीं तो इस पर विनम्र जवाब क्या है?
फणी ऋत्विज

@PhaniRithvij दर आपके अनुरोधों को सीमित कर देती है, wget के पास इसके लिए पैरामीटर हैं। ध्यान दें कि कुछ लोग अभी भी समस्या ले सकते हैं, और रोबोट फ़ाइल पर विचार करते हुए स्पष्ट रूप से आपको बता रहा है कि यह वह करने की अनुमति नहीं है जो आप वर्तमान में कर रहे हैं, आप कानूनी मुसीबत में भी पड़ सकते हैं।
कोई नहीं

37

आपको एम (दर्पण) ध्वज का उपयोग करना चाहिए, क्योंकि यह ध्यान रखता है कि टाइमस्टैम्प के साथ गड़बड़ न हो और अनिश्चित काल तक पुनरावृत्ति हो।

wget -m http://example.com/configs/.vim/

यदि आप इस सूत्र में दूसरों द्वारा उल्लिखित बिंदुओं को जोड़ते हैं, तो यह होगा:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

34

यहाँ पूरी wget कमांड है जो सर्वर की डायरेक्टरी (अनदेखी robots.txt) से फाइल डाउनलोड करने के लिए मेरे लिए काम करती है :

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

8

यदि --no-parentमदद नहीं, तो आप --includeविकल्प का उपयोग कर सकते हैं ।

निर्देशिका संरचना:

http://<host>/downloads/good
http://<host>/downloads/bad

और आप डाउनलोड करना चाहते हैं downloads/goodलेकिन downloads/badनिर्देशिका नहीं :

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good


5

उपयोगकर्ता नाम और पासवर्ड के साथ एक निर्देशिका पुन: प्राप्त करने के लिए, निम्नलिखित कमांड का उपयोग करें:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

2

Wget 1.18 बेहतर काम कर सकता है, उदाहरण के लिए, मुझे एक संस्करण 1.12 बग से काट लिया गया जहाँ ...

wget --recursive (...)

... केवल सभी फ़ाइलों के बजाय index.html को पुनः प्राप्त करता है।

वर्कअराउंड में कुछ 301 रीडायरेक्ट्स को नोटिस करना था और नए स्थान को आज़माना था - नए URL को देखते हुए, wget को डायरेक्टरी की सभी फाइलें मिल गईं।


2

आप सभी की जरूरत है दो झंडे, एक "-r"पुनरावृत्ति के लिए है और "--no-parent"(या -np) क्रम में '.'और में नहीं जाने के लिए ".." । ऐशे ही:

wget -r --no-parent http://example.com/configs/.vim/

बस। यह निम्नलिखित स्थानीय पेड़ में डाउनलोड होगा ./example.com/configs/.vim:। हालाँकि, यदि आप पहले दो निर्देशिकाओं को नहीं चाहते हैं, तो अतिरिक्त झंडे का उपयोग करें --cut-dirs=2जैसा कि पहले के उत्तरों में सुझाया गया है:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

और यह आपके फ़ाइल ट्री को ही डाउनलोड करेगा ./.vim/

वास्तव में, मुझे इस उत्तर से पहली पंक्ति ठीक मैनुअल मैनुअल से मिली , उनका खंड 4.3 के अंत में बहुत साफ उदाहरण है।


2

पुनरावर्ती डाउनलोड के साथ काम करते समय निम्नलिखित विकल्प सही संयोजन प्रतीत होता है:

wget -nd -np -P / dest / dir -recursive http: // url / dir1 / dir2

सुविधा के लिए मैन पेज से प्रासंगिक स्निपेट:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

1

आपको इसे केवल -r जोड़कर करने में सक्षम होना चाहिए

wget -r http://stackoverflow.com/

9
यह वास्तव में एक निर्देशिका डाउनलोड नहीं करता है, लेकिन सभी फाइलें जो इसे सर्वर पर मिल सकती हैं, जिसमें आप जिस निर्देशिका को डाउनलोड करना चाहते हैं उसके ऊपर निर्देशिकाएं शामिल हैं।
ल्यूक

1

यह संस्करण पुनरावर्ती डाउनलोड करता है और मूल निर्देशिका नहीं बनाता है।

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

उपयोग:

  1. ~/.bashrcटर्मिनल में जोड़ें या पेस्ट करें
  2. wgetod "http://example.com/x/"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.