Wget का उपयोग करके एक साथ कई डाउनलोड?


207

मैं वेबसाइट सामग्री को डाउनलोड करने के लिए wget का उपयोग कर रहा हूं, लेकिन wget एक-एक करके फ़ाइलों को डाउनलोड करता है।

मैं एक साथ 4 कनेक्शनों का उपयोग करके wget डाउनलोड कैसे कर सकता हूं?


4
एक अच्छा समाधान के साथ इसी तरह का सवाल: stackoverflow.com/questions/7577615/parallel-wget-in-bash
JohnEye

इस परियोजना पर एक नज़र डालें github.com/rockdaboot/wget2
user9869932

जवाबों:


197

aria2 का उपयोग करें:

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 

http://aria2.sourceforge.net

मुझे यह पसंद है !!


26
मैं यह नहीं देखता कि यह कैसे एक वेबसाइट को डाउनलोड करने में मदद करता है - ऐसा लगता है कि यह केवल 1 फ़ाइल डाउनलोड करता है। अगर यह सच है - वोट होना चाहिए -ve।
स्टीफन

8
मैं मानता हूं, यह एक अच्छा जवाब नहीं है, क्योंकि aria2 वेब या ftp मिररिंग जैसे कि wget या lftp नहीं कर सकता है। lftp मिररिंग के साथ-साथ कई कनेक्शन का समर्थन करता है।
Anachronist

9
-sविभाजन की संख्या निर्दिष्ट करने के लिए, और -kविभाजन खंड प्रति न्यूनतम आकार निर्दिष्ट करने के लिए मत भूलना - अन्यथा आप -xअधिकतम कनेक्शन तक कभी नहीं पहुंच सकते ।
बॉब

2
@Stephen यह है कि बहुत बड़ी फ़ाइलों को एक के बजाय सर्वर पर कई सॉकेट्स का उपयोग करके वेबसाइटों से बहुत तेज़ी से डाउनलोड किया जाए। यह एक वेबसाइट को स्क्रैप करने के लिए नहीं है।
गाबियो

मोज़े का समर्थन नहीं करता *
फेडकम्प

111

फ़ाइलों के डाउनलोड को तेज करने के लिए Wget कई सॉकेट कनेक्शन का समर्थन नहीं करता है।

मुझे लगता है कि हम gmarian उत्तर की तुलना में थोड़ा बेहतर कर सकते हैं।

सही तरीका उपयोग करना है aria2

aria2c -x 16 -s 16 [url]
#          |    |
#          |    |
#          |    |
#          ---------> the number of connections here

19
दस्तावेज़ करने के लिए -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1और-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5
निक

मापदंडों पर विस्तृत रूप से धन्यवाद देने के लिए धन्यवाद, निक।
thomas.han

4
विकल्प -s अकेले 1.10 रिलीज के बाद से एक एकल सर्वर से एक फ़ाइल को विभाजित नहीं करता है। एक से अधिक कनेक्शन स्थापित करने के लिए एक साथ -मैक्स-कनेक्शन-प्रति-सर्वर का उपयोग करने की आवश्यकता है। Aria2 प्रलेखन देखें: About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
शमूएल ली

1
@ सैमुएलली के अपडेट का शॉर्टहैंड aria2c -x 4 -k 1M urlमेरे लिए अच्छा है और (प्रति कनेक्शन 100k की सीमा के साथ एक सर्वर ने मुझे 400k पर डाउनलोड करने के लिए कहा है)
EkriirkE

गंभीर रूप से, पुनरावर्ती HTTP डाउनलोड का समर्थन नहींaria2 करता है , अगर यह वांछित है तो यह एक घटिया प्रतिस्थापन बना सकता है । wget-r
user2943160

55

चूंकि जीएनयू समानांतर का उल्लेख अभी तक नहीं किया गया है, मुझे दूसरा रास्ता देना चाहिए:

cat url.list | parallel -j 8 wget -O {#}.html {}

5
यह दिलचस्प दृष्टिकोण है। वास्तव में लागू नहीं जब आपको एक बड़ी फ़ाइल डाउनलोड करने की आवश्यकता होती है और आपको प्रति कनेक्शन सीमित गति मिलती है, लेकिन कई फ़ाइलों को डाउनलोड करते समय उपयोगी हो सकता है।
निकोला पेटकंस्की

इस कमांड को चलाने पर 8 बार सूची चलेगी, नहीं? मैंने इसे उसी तरह से किया और प्रत्येक पंक्ति को 8 समानताओं के साथ संसाधित करने के बजाय, यह पूरी सूची को 8 बार संसाधित करता है।
डोमेन

4
नहीं, यह 8 नौकरियों पर सूची को विभाजित करता है
निकोले श्यामरेव

ठीक है, मैं निश्चित रूप से कुछ अजीब कर रहा हूं। इसका पता लगा लेंगे। शीघ्र जवाब देने के लिए ध्न्यवाद।
डोमेन

1
यह एक बेकार उपयोग हैcat , यद्यपि। इस सीमित संदर्भ में, यह काफी हानिरहित है, लेकिन शायद आप इस एंटीपैटर्न को नष्ट नहीं करना चाहते हैं।
ट्रिपलए

39

मैंने (शायद) एक समाधान पाया

एक सर्वर से अगले तक कुछ हज़ार लॉग फ़ाइलों को डाउनलोड करने की प्रक्रिया में मुझे अचानक BSD में कुछ गंभीर मल्टीथ्रेडेड डाउनलोड करने की आवश्यकता थी, अधिमानतः Wget के साथ क्योंकि यह सबसे आसान तरीका था जिससे मैं इसे संभालने के बारे में सोच सकता था। एक छोटी सी तलाश ने मुझे इस छोटे से डग पर ले गया:

wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url]

wget -r -np -N [url]जितनी जरूरत हो उतने धागे के लिए बस दोहराएं ... अब यह बहुत सुंदर नहीं है और निश्चित रूप से ऐसा करने के लिए बेहतर तरीके हैं, लेकिन अगर आप कुछ जल्दी और गंदा चाहते हैं तो यह करना चाहिए ...

नोट: विकल्प -Nबनाता है wgetकेवल "नए" फ़ाइलों को डाउनलोड, जिसका अर्थ यह नहीं होगा सर्वर पर उनका टाइमस्टैम्प परिवर्तन जब तक अधिलेखित या फिर से डाउनलोड फ़ाइलों।


11
लेकिन क्या यह प्रत्येक प्रक्रिया के लिए कलाकृतियों का पूरा सेट डाउनलोड नहीं करता है?
काई मैटर्न

10
@KaiMattern: -ncविकल्प जोड़ें : "नो क्लोबेर " - यह वैक्सीन को डाउनलोड किए गए एरियाली (यहां तक ​​कि आंशिक रूप से) फ़ाइलों को अनदेखा करने का कारण बनता है।
एसएफ।

1
मेरे पास उन चित्रों की एक सूची थी जिन्हें मुझे डाउनलोड करने की आवश्यकता थी, और इसने मेरे लिए भी काम किया: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncबहुत बदसूरत, लेकिन हे, यह काम करता है। : P
जेरेड

1
किसी कारण से टूटे हुए उन कनेक्शनों में से एक होने से, आपको अन्य कनेक्शनों द्वारा छुआ बिना, अपूर्ण फाइलें मिल जाती हैं। यह विधि अखंडता मुद्दों को बनाता है।
मुहम्मददेव

-bझंडा, पृष्ठभूमि में wget प्रक्रिया चलेंगे बैश के लिए एक विकल्प के रूप में &काम में निर्मित नियंत्रण। यदि -o <filename>निर्दिष्ट नहीं है तो STDOUT को wget-log लिखा जाएगा । स्क्रिप्टिंग के लिए अच्छा है। अधिक जानकारी के लिए wget (1) देखें।
पॉल

21

एक और कार्यक्रम जो ऐसा कर सकता है axel

axel -n <NUMBER_OF_CONNECTIONS> URL

बेसिक HTTP प्रामाणिक के लिए,

axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"

उबंटू मैन पेज


5
यह कार्यक्रम असीमित संख्या में कनेक्शन की अनुमति देता है जो कुछ मामलों में बहुत उपयोगी है।
uglide

1
महान उपकरण। for centos6.xi का उपयोग rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/…
satch_boogie

एक्सल HTTP बेसिक को नहीं कर सकता :(
rustyx

1
मैं आमतौर परaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
भगवान लोह।

क्या मैं पुन: पूर्ण फ़ोल्डर डाउनलोड करने के लिए एक्सल का उपयोग कर सकता हूं?
रयान एरी

17

एक नया (लेकिन अभी तक जारी नहीं किया गया) टूल Mget है । यह पहले से ही Wget से ज्ञात कई विकल्प हैं और एक पुस्तकालय के साथ आता है जो आपको अपने स्वयं के एप्लिकेशन में आसानी से डाउनलोड (पुनरावर्ती) करने की अनुमति देता है।

तुम्हारे प्रश्न का उत्तर देने के लिए:

mget --num-threads=4 [url]

अपडेट करें

Mget को अब Wget2 के रूप में विकसित किया गया है जिसमें कई बग फिक्स और अधिक सुविधाएँ (जैसे HTTP / 2 समर्थन) हैं।

--num-threadsअब है --max-threads


अच्छा लगा। धन्यवाद!
user9869932

कैसे मैक पर wget2 स्थापित करने के लिए कोई सुझाव? साइट केवल दस्तावेजों को स्रोत से इसे कैसे स्थापित करें और ऑटोपॉइंट प्राप्त करने में परेशानी हो रही है
क्रिस

TravisCI स्क्रिप्ट में हम गेटब्रेक (जिसमें ऑटोपॉइंट शामिल है) को स्थापित करने के लिए होमब्रे का उपयोग करते हैं। Wget2 रेपो से .travis_setup.sh पर एक नज़र डालें।
रॉकडबूट

13

मैं दृढ़ता से नोक का उपयोग करने का सुझाव देता हूं।

उदाहरण के लिए: httrack -v -w http://example.com/

यह डिफ़ॉल्ट रूप में 8 युगपत कनेक्शन के साथ एक दर्पण करेगा। जहां खेलने के लिए हैट्रैक के पास कई विकल्प हैं। एक नज़र देख लो।


@ aaa90210: यह बहुत अच्छा होगा अगर आपने सफलतापूर्वक प्रोग्राम की कमियों को समझाया हो। ArturBodera की टिप्पणी बहुत अधिक जानकारीपूर्ण है।
रिचर्ड

@ArturBodera आप अपने प्रोग्राम को चलाने वाले फोल्डर में कुकीज़.टेक्स्ट फ़ाइल जोड़ सकते हैं और यह स्वचालित रूप से उन कुकीज़ को डाउनलोड हेडर में जोड़ देगा।
Bertoncelj1

क्रैक पुनर्निर्देशन का समर्थन नहीं करता है
क्रिस हंट

11

जैसा कि अन्य पोस्टरों ने उल्लेख किया है, मेरा सुझाव है कि आपके पास aria2 पर एक नज़र होगी । संस्करण 1.16.1 के लिए Ubuntu मैन पेज से:

aria2 फ़ाइलों को डाउनलोड करने के लिए एक उपयोगिता है। समर्थित प्रोटोकॉल HTTP (एस), एफ़टीपी, बिटटोरेंट और मेटलिंक हैं। aria2 कई स्रोतों / प्रोटोकॉल से एक फ़ाइल डाउनलोड कर सकता है और आपके अधिकतम डाउनलोड बैंडविड्थ का उपयोग करने की कोशिश करता है। यह HTTP (S) / FTP और BitTorrent से एक ही समय में एक फ़ाइल डाउनलोड करने का समर्थन करता है, जबकि HTTP (S) / FTP से डाउनलोड किया गया डेटा बिटटोरेंट झुंड में अपलोड किया जाता है। मेटलिंक के चंक चेकसम का उपयोग करते हुए, aria2 स्वचालित रूप से बिटटोरेंट जैसी फ़ाइल डाउनलोड करते समय डेटा के विखंडन को मान्य करता है।

आप -xप्रति सर्वर की अधिकतम संख्या निर्दिष्ट करने के लिए ध्वज का उपयोग कर सकते हैं (डिफ़ॉल्ट: 1):

aria2c -x 16 [url] 

यदि एक ही फ़ाइल कई स्थानों से उपलब्ध है, तो आप उन सभी से डाउनलोड करना चुन सकते हैं। -jप्रत्येक स्थिर URI (डिफ़ॉल्ट: 5) के लिए समानांतर डाउनलोड की अधिकतम संख्या निर्दिष्ट करने के लिए ध्वज का उपयोग करें ।

aria2c -j 5 [url] [url2]

अधिक जानकारी के लिए http://aria2.sourceforge.net/ पर एक नज़र डालें । उपयोग जानकारी के लिए, मैन पेज वास्तव में वर्णनात्मक है और उपयोग उदाहरणों के साथ नीचे की ओर एक खंड है। एक ऑनलाइन संस्करण http://aria2.sourceforge.net/manual/en/html/README.html पर पाया जा सकता है ।


8

केंट डाउनलोड को कई कनेक्शनों में कर सकते हैं, इसके बजाय आप aria2 जैसे अन्य प्रोग्राम को यूजर करने की कोशिश कर सकते हैं।



4

उपयोग

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &

वेबसाइटों में। प्रति पंक्ति 1 यूआरएल डालें, उदाहरण:

https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4

2

वे हमेशा कहते हैं कि यह निर्भर करता है लेकिन जब एक वेबसाइट को मिरर करने की बात आती है तो सबसे अच्छा मौजूद है क्रैक । यह सुपर फास्ट और काम करना आसान है। केवल नकारात्मक पक्ष यह तथाकथित समर्थन मंच है लेकिन आप आधिकारिक प्रलेखन का उपयोग करके अपना रास्ता पा सकते हैं । इसमें GUI और CLI दोनों इंटरफ़ेस है और यह कुकीज़ का समर्थन करता है बस डॉक्स को पढ़ें यह सबसे अच्छा है। (इस टूल के साथ आप अपने हार्डड्राइव पर पूरे वेब को डाउनलोड कर सकते हैं)

httrack -c8 [url]

डिफ़ॉल्ट रूप से सर्वर अधिभार से बचने के लिए 8 से सीमित एक साथ अधिकतम कनेक्शन


2

समानांतर में कई फ़ाइल में काम xargsकरने के लिए उपयोग करेंwget

#!/bin/bash

mywget()
{
    wget "$1"
}

export -f mywget

# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt

Aria2 विकल्प, 20mb से छोटे फ़ाइल के साथ काम करने का सही तरीका

aria2c -k 2M -x 10 -s 10 [url]

-k 2M 2mb चंक में विभाजित फ़ाइल

-kया --min-split-size20mb का डिफ़ॉल्ट मान है, यदि आपने इस विकल्प को सेट नहीं किया है और 20mb के तहत फाइल करता है तो यह केवल एकल कनेक्शन में चलेगा चाहे कोई भी मूल्य हो -xया नहीं-s


1

makeआसानी से समानांतर किया जा सकता है (जैसे, make -j 4)। उदाहरण के लिए, यहाँ एक सरल Makefileमैं wget का उपयोग करके समानांतर में फ़ाइलों को डाउनलोड करने के लिए उपयोग कर रहा हूँ:

BASE=http://www.somewhere.com/path/to
FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log

all: $(FILES)
    echo $(FILES)

%.ext:
    wget -N -a $(LOG) $(BASE)/$@

.PHONY: all
default: all

0

नियमित एक्सप्रेशन या एफ़टीपी ग्लोबिंग का उपयोग करने पर विचार करें । उसके द्वारा आप कई बार फ़ाइल नाम के अलग-अलग समूहों के साथ शुरू कर सकते हैं जो वर्णों के शुरू होने की आवृत्ति के आधार पर होते हैं।

यह उदाहरण के लिए है कि कैसे मैं दो NAS के बीच एक फ़ोल्डर सिंक करता हूं:

wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo &
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo &

पहला wget सभी फ़ाइलों / फ़ोल्डरों को सम्‍मिलित करता है 0, 1, 2... F, G, Hऔर दूसरा थ्रेड सब कुछ समन्‍वयित करता है।

यह एक NAS के बीच एक 10G ईथरनेट पोर्ट (10.0.0.100) और एक NAS के साथ दो 1G ईथरनेट पोर्ट (10.0.0.10 और 10.0.0.11) के बीच सिंक करने का सबसे आसान तरीका था। मैंने --bind-addressअलग-अलग इथरनेट पोर्ट के माध्यम से दो wget थ्रेड्स को बाध्य किया और &प्रत्येक पंक्ति के अंत में डालकर उन्हें समानांतर कहा । उसके द्वारा मैं 2x 100 एमबी / एस = 200 एमबी / एस के साथ बड़ी फ़ाइलों को कॉपी करने में सक्षम था।

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