मैं वेबसाइट सामग्री को डाउनलोड करने के लिए wget का उपयोग कर रहा हूं, लेकिन wget एक-एक करके फ़ाइलों को डाउनलोड करता है।
मैं एक साथ 4 कनेक्शनों का उपयोग करके wget डाउनलोड कैसे कर सकता हूं?
मैं वेबसाइट सामग्री को डाउनलोड करने के लिए wget का उपयोग कर रहा हूं, लेकिन wget एक-एक करके फ़ाइलों को डाउनलोड करता है।
मैं एक साथ 4 कनेक्शनों का उपयोग करके wget डाउनलोड कैसे कर सकता हूं?
जवाबों:
aria2 का उपयोग करें:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
मुझे यह पसंद है !!
-s
विभाजन की संख्या निर्दिष्ट करने के लिए, और -k
विभाजन खंड प्रति न्यूनतम आकार निर्दिष्ट करने के लिए मत भूलना - अन्यथा आप -x
अधिकतम कनेक्शन तक कभी नहीं पहुंच सकते ।
फ़ाइलों के डाउनलोड को तेज करने के लिए Wget कई सॉकेट कनेक्शन का समर्थन नहीं करता है।
मुझे लगता है कि हम gmarian उत्तर की तुलना में थोड़ा बेहतर कर सकते हैं।
सही तरीका उपयोग करना है aria2
।
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
-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
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.
aria2c -x 4 -k 1M url
मेरे लिए अच्छा है और (प्रति कनेक्शन 100k की सीमा के साथ एक सर्वर ने मुझे 400k पर डाउनलोड करने के लिए कहा है)
aria2
करता है , अगर यह वांछित है तो यह एक घटिया प्रतिस्थापन बना सकता है । wget
-r
चूंकि जीएनयू समानांतर का उल्लेख अभी तक नहीं किया गया है, मुझे दूसरा रास्ता देना चाहिए:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
, यद्यपि। इस सीमित संदर्भ में, यह काफी हानिरहित है, लेकिन शायद आप इस एंटीपैटर्न को नष्ट नहीं करना चाहते हैं।
मैंने (शायद) एक समाधान पाया
एक सर्वर से अगले तक कुछ हज़ार लॉग फ़ाइलों को डाउनलोड करने की प्रक्रिया में मुझे अचानक 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
केवल "नए" फ़ाइलों को डाउनलोड, जिसका अर्थ यह नहीं होगा सर्वर पर उनका टाइमस्टैम्प परिवर्तन जब तक अधिलेखित या फिर से डाउनलोड फ़ाइलों।
-nc
विकल्प जोड़ें : "नो क्लोबेर " - यह वैक्सीन को डाउनलोड किए गए एरियाली (यहां तक कि आंशिक रूप से) फ़ाइलों को अनदेखा करने का कारण बनता है।
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
बहुत बदसूरत, लेकिन हे, यह काम करता है। : P
-b
झंडा, पृष्ठभूमि में wget प्रक्रिया चलेंगे बैश के लिए एक विकल्प के रूप में &
काम में निर्मित नियंत्रण। यदि -o <filename>
निर्दिष्ट नहीं है तो STDOUT को wget-log लिखा जाएगा । स्क्रिप्टिंग के लिए अच्छा है। अधिक जानकारी के लिए wget (1) देखें।
एक और कार्यक्रम जो ऐसा कर सकता है axel
।
axel -n <NUMBER_OF_CONNECTIONS> URL
बेसिक HTTP प्रामाणिक के लिए,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
एक नया (लेकिन अभी तक जारी नहीं किया गया) टूल Mget है । यह पहले से ही Wget से ज्ञात कई विकल्प हैं और एक पुस्तकालय के साथ आता है जो आपको अपने स्वयं के एप्लिकेशन में आसानी से डाउनलोड (पुनरावर्ती) करने की अनुमति देता है।
तुम्हारे प्रश्न का उत्तर देने के लिए:
mget --num-threads=4 [url]
अपडेट करें
Mget को अब Wget2 के रूप में विकसित किया गया है जिसमें कई बग फिक्स और अधिक सुविधाएँ (जैसे HTTP / 2 समर्थन) हैं।
--num-threads
अब है --max-threads
।
मैं दृढ़ता से नोक का उपयोग करने का सुझाव देता हूं।
उदाहरण के लिए: httrack -v -w http://example.com/
यह डिफ़ॉल्ट रूप में 8 युगपत कनेक्शन के साथ एक दर्पण करेगा। जहां खेलने के लिए हैट्रैक के पास कई विकल्प हैं। एक नज़र देख लो।
जैसा कि अन्य पोस्टरों ने उल्लेख किया है, मेरा सुझाव है कि आपके पास 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 पर पाया जा सकता है ।
केंट डाउनलोड को कई कनेक्शनों में कर सकते हैं, इसके बजाय आप aria2 जैसे अन्य प्रोग्राम को यूजर करने की कोशिश कर सकते हैं।
pcurl का प्रयास करें
http://sourceforge.net/projects/pcurl/
wget के बजाय कर्ल का उपयोग करता है, समानांतर में 10 खंडों में डाउनलोड करता है।
उपयोग
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
वे हमेशा कहते हैं कि यह निर्भर करता है लेकिन जब एक वेबसाइट को मिरर करने की बात आती है तो सबसे अच्छा मौजूद है क्रैक । यह सुपर फास्ट और काम करना आसान है। केवल नकारात्मक पक्ष यह तथाकथित समर्थन मंच है लेकिन आप आधिकारिक प्रलेखन का उपयोग करके अपना रास्ता पा सकते हैं । इसमें GUI और CLI दोनों इंटरफ़ेस है और यह कुकीज़ का समर्थन करता है बस डॉक्स को पढ़ें यह सबसे अच्छा है। (इस टूल के साथ आप अपने हार्डड्राइव पर पूरे वेब को डाउनलोड कर सकते हैं)
httrack -c8 [url]
डिफ़ॉल्ट रूप से सर्वर अधिभार से बचने के लिए 8 से सीमित एक साथ अधिकतम कनेक्शन
समानांतर में कई फ़ाइल में काम 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-size
20mb का डिफ़ॉल्ट मान है, यदि आपने इस विकल्प को सेट नहीं किया है और 20mb के तहत फाइल करता है तो यह केवल एकल कनेक्शन में चलेगा चाहे कोई भी मूल्य हो -x
या नहीं-s
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
नियमित एक्सप्रेशन या एफ़टीपी ग्लोबिंग का उपयोग करने पर विचार करें । उसके द्वारा आप कई बार फ़ाइल नाम के अलग-अलग समूहों के साथ शुरू कर सकते हैं जो वर्णों के शुरू होने की आवृत्ति के आधार पर होते हैं।
यह उदाहरण के लिए है कि कैसे मैं दो 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 एमबी / एस के साथ बड़ी फ़ाइलों को कॉपी करने में सक्षम था।