Saya tidak melihat bagaimana ini membantu mengunduh situs web - sepertinya hanya mengunduh 1 file. Jika ini benar - suara harus -ve.
Stephen
8
Saya setuju, ini bukan jawaban yang baik, karena aria2 tidak dapat melakukan mirroring web atau ftp seperti wget atau lftp. lftp melakukan mirroring serta mendukung banyak koneksi.
Anachronist
9
Jangan lupa -suntuk menentukan jumlah pemisahan, dan -kuntuk menentukan ukuran minimum per segmen split - jika tidak, Anda mungkin tidak akan pernah mencapai -xkoneksi maks.
Bob
2
@Stephen ini untuk mengunduh file yang sangat besar jauh lebih cepat dari situs web dengan menggunakan beberapa soket ke server alih-alih satu. Ini bukan berarti untuk mengikis situs web.
gabeio
tidak mendukung kaus kaki *
Fedcomp
111
Wget tidak mendukung beberapa koneksi soket untuk mempercepat pengunduhan file.
Saya pikir kita bisa melakukan sedikit lebih baik daripada jawaban gmarian.
Untuk mendokumentasikan -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1dan-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
Nick
Terima kasih telah menguraikan parameter, Nick.
thomas.han
4
Opsi -s saja tidak lagi membagi file dari satu server sejak rilis 1.10. Kita perlu menggunakan --max-connection-per-server bersama untuk memaksa membangun beberapa koneksi. Lihat dokumentasi 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.
Samuel Li
1
Singkatan dari pembaruan @ SamuelLi adalah aria2c -x 4 -k 1M urldan bekerja dengan baik untuk saya (server dengan batas 100k per koneksi izinkan saya mengunduh pada 400k dengan parameter tersebut)
EkriirkE
Kritis, aria2tidak tidak mendukung download HTTP rekursif, membuatnya menjadi pengganti standar untuk wgetjika -rdiinginkan.
user2943160
55
Karena paralel GNU belum disebutkan, izinkan saya memberi cara lain:
Itu pendekatan yang menarik. Tidak benar-benar berlaku ketika Anda perlu mengunduh file besar dan Anda mendapatkan kecepatan terbatas per koneksi, tetapi dapat berguna saat mengunduh banyak file.
Nikola Petkanski
Menjalankan perintah ini akan menjalankan daftar 8 kali, bukan? Saya melakukannya dengan cara yang sama dan alih-alih memproses setiap baris dengan 8 paralel, itu hanya memproses seluruh daftar 8 kali.
DomainsFeatured
4
Tidak, itu membagi daftar pada 8 pekerjaan
Nikolay Shmyrev
Oke, saya pasti melakukan sesuatu yang aneh. Akan mengetahuinya. Terima kasih atas tanggapan cepatnya.
DomainsFeatured
1
Tapi itu penggunaan yang tidak bergunacat . Dalam konteks terbatas ini, ini cukup tidak berbahaya, tetapi mungkin Anda tidak ingin melakukan antipattern ini.
Dalam proses mengunduh beberapa ribu file log dari satu server ke server berikutnya, tiba-tiba saya perlu melakukan pengunduhan multithreaded serius di BSD, lebih disukai dengan Wget karena itu adalah cara paling sederhana yang dapat saya pikirkan untuk menangani ini. Sedikit melihat sekeliling membawa saya ke nugget kecil ini:
Cukup ulangi wget -r -np -N [url]sebanyak mungkin utas yang Anda butuhkan ... Sekarang mengingat ini tidak cantik dan pasti ada cara yang lebih baik untuk melakukan ini tetapi jika Anda menginginkan sesuatu yang cepat dan kotor itu harus melakukan trik ...
Catatan: opsi -Nini wgethanya membuat file unduhan "yang lebih baru", yang berarti tidak akan menimpa atau mengunduh ulang file kecuali stempel waktu mereka berubah di server.
Tapi bukankah itu mengunduh seluruh rangkaian artefak untuk setiap proses?
Kai Mattern
10
@ KaiMattern: tambahkan -ncopsi: "no clobber" - ini menyebabkan wget untuk mengabaikan file yang sudah diunduh (bahkan sebagian).
SF.
1
Saya punya daftar gambar yang perlu saya unduh, dan ini juga berhasil bagi saya: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncSangat jelek, tapi hei, itu berfungsi. : P
Jared
1
Salah satu koneksi yang rusak karena suatu alasan memberi Anda file yang tidak lengkap, tanpa disentuh oleh koneksi lain. Metode ini menciptakan masalah integritas.
muhammedv
The -bbendera akan menjalankan proses wget di latar belakang, sebagai alternatif untuk bash &kontrol pekerjaan built-in. STDOUT akan ditulis ke wget-log jika -o <filename>tidak ditentukan. Bagus untuk scripting. Lihat wget (1) untuk lebih jelasnya.
Paul
21
Program lain yang dapat melakukan ini adalah axel.
axel -n <NUMBER_OF_CONNECTIONS> URL
Untuk HTTP Auth baisic,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
Saya biasanya melakukannyaaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Tuan Loh.
dapatkah saya menggunakan axel untuk mengunduh seluruh folder secara rekursif?
Ryan Arief
17
Alat baru (tetapi belum dirilis) adalah Mget . Ini sudah memiliki banyak opsi yang diketahui dari Wget dan dilengkapi dengan perpustakaan yang memungkinkan Anda untuk dengan mudah menanamkan (rekursif) mengunduh ke dalam aplikasi Anda sendiri.
Untuk menjawab pertanyaan Anda:
mget --num-threads=4 [url]
MEMPERBARUI
Mget sekarang dikembangkan sebagai Wget2 dengan banyak bug diperbaiki dan lebih banyak fitur (mis. Dukungan HTTP / 2).
ada tips tentang cara menginstal wget2 di mac? Situs hanya mendokumentasikan cara menginstalnya dari sumber dan mengalami kesulitan mendapatkan autopoint
Chris
Di dalam skrip TravisCI kami menggunakan homebrew untuk menginstal gettext (termasuk autopoint). Lihat .travis_setup.sh dari repo wget2.
rockdaboot
13
Saya sangat menyarankan untuk menggunakan httrack.
ex: httrack -v -w http://example.com/
Ini akan melakukan mirror dengan 8 koneksi simultan sebagai default. Httrack memiliki banyak pilihan tempat bermain. Silahkan lihat.
@ aaa90210: Alangkah baiknya jika Anda menjelaskan secara singkat kekurangan program. Komentar ArturBodera jauh lebih informatif.
Richard
@ArturBodera Anda dapat menambahkan file cookies.txt ke folder tempat Anda menjalankan program dan secara otomatis akan menambahkan cookie itu ke header unduhan.
Bertoncelj1
httrack tidak mendukung pengalihan berikut
Chris Hunt
11
Seperti yang telah disebutkan poster lainnya, saya sarankan Anda melihat aria2 . Dari halaman manual Ubuntu untuk versi 1.16.1:
aria2 adalah utilitas untuk mengunduh file. Protokol yang didukung adalah HTTP (S), FTP, BitTorrent, dan Metalink. aria2 dapat mengunduh file dari berbagai sumber / protokol dan mencoba memanfaatkan bandwidth unduhan maksimum Anda. Ini mendukung pengunduhan file dari HTTP (S) / FTP dan BitTorrent secara bersamaan, sementara data yang diunduh dari HTTP (S) / FTP diunggah ke gerombolan BitTorrent. Menggunakan checksum chunk Metalink, aria2 secara otomatis memvalidasi potongan data saat mengunduh file seperti BitTorrent.
Anda dapat menggunakan -xbendera untuk menentukan jumlah koneksi maksimum per server (default: 1):
aria2c -x 16 [url]
Jika file yang sama tersedia dari beberapa lokasi, Anda dapat memilih untuk mengunduh dari semuanya. Gunakan -jbendera untuk menentukan jumlah maksimum unduhan paralel untuk setiap URI statis (default: 5).
Mereka selalu mengatakan itu tergantung tetapi ketika datang ke mirroring sebuah situs web Httrack terbaik ada . Ini sangat cepat dan mudah digunakan. Satu-satunya downside adalah itu disebut forum dukungan tetapi Anda dapat menemukan cara Anda menggunakan dokumentasi resmi . Ini memiliki kedua antarmuka GUI dan CLI dan Mendukung cookie hanya membaca dokumen Ini adalah yang terbaik. (Jadilah menyembuhkan dengan alat ini Anda dapat mengunduh seluruh web pada hard drive Anda)
httrack -c8 [url]
Secara default, jumlah maksimum koneksi simultan terbatas pada 8 untuk menghindari server berlebih
gunakan xargsuntuk membuat wgetbekerja di banyak file secara paralel
#!/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
Opsi Aria2, Cara yang benar bekerja dengan file yang lebih kecil dari 20mb
aria2c -k 2M -x 10 -s 10 [url]
-k 2M pisahkan file menjadi 2mb chunk
-katau --min-split-sizememiliki nilai default 20mb, jika Anda tidak menetapkan opsi dan file di bawah 20mb, ia hanya akan berjalan dalam satu koneksi tidak peduli berapa pun nilainya -xatau-s
makedapat diparalelkan dengan mudah (misalnya, make -j 4). Sebagai contoh, inilah cara sederhana yang Makefilesaya gunakan untuk mengunduh file secara paralel menggunakan 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
Pertimbangkan untuk menggunakan Regular Expressions atau FTP Globbing . Dengan itu Anda bisa mulai wget beberapa kali dengan berbagai kelompok karakter nama file mulai tergantung pada frekuensi kemunculannya.
Ini misalnya bagaimana saya menyinkronkan folder antara dua NAS:
Wget pertama menyinkronkan semua file / folder dimulai dengan 0, 1, 2... F, G, Hdan utas kedua menyinkronkan yang lainnya.
Ini adalah cara termudah untuk menyinkronkan antara NAS dengan satu port ethernet 10G (10.0.0.100) dan NAS dengan dua port ethernet 1G (10.0.0.10 dan 10.0.0.11). Saya mengikat kedua benang wget --bind-addresske port ethernet yang berbeda dan menyebutnya paralel dengan meletakkan &di akhir setiap baris. Dengan itu saya dapat menyalin file besar dengan 2x 100 MB / s = 200 MB / s secara total.
Jawaban:
gunakan aria2:
http://aria2.sourceforge.net
Aku menyukainya !!
sumber
-s
untuk menentukan jumlah pemisahan, dan-k
untuk menentukan ukuran minimum per segmen split - jika tidak, Anda mungkin tidak akan pernah mencapai-x
koneksi maks.Wget tidak mendukung beberapa koneksi soket untuk mempercepat pengunduhan file.
Saya pikir kita bisa melakukan sedikit lebih baik daripada jawaban gmarian.
Cara yang benar adalah menggunakan
aria2
.sumber
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
dan-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
dan bekerja dengan baik untuk saya (server dengan batas 100k per koneksi izinkan saya mengunduh pada 400k dengan parameter tersebut)aria2
tidak tidak mendukung download HTTP rekursif, membuatnya menjadi pengganti standar untukwget
jika-r
diinginkan.Karena paralel GNU belum disebutkan, izinkan saya memberi cara lain:
sumber
cat
. Dalam konteks terbatas ini, ini cukup tidak berbahaya, tetapi mungkin Anda tidak ingin melakukan antipattern ini.Saya menemukan (mungkin) solusi
Catatan: opsi
-N
iniwget
hanya membuat file unduhan "yang lebih baru", yang berarti tidak akan menimpa atau mengunduh ulang file kecuali stempel waktu mereka berubah di server.sumber
-nc
opsi: "no clobber" - ini menyebabkan wget untuk mengabaikan file yang sudah diunduh (bahkan sebagian).wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Sangat jelek, tapi hei, itu berfungsi. : P-b
bendera akan menjalankan proses wget di latar belakang, sebagai alternatif untuk bash&
kontrol pekerjaan built-in. STDOUT akan ditulis ke wget-log jika-o <filename>
tidak ditentukan. Bagus untuk scripting. Lihat wget (1) untuk lebih jelasnya.Program lain yang dapat melakukan ini adalah
axel
.Untuk HTTP Auth baisic,
Halaman manual Ubuntu .
sumber
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Alat baru (tetapi belum dirilis) adalah Mget . Ini sudah memiliki banyak opsi yang diketahui dari Wget dan dilengkapi dengan perpustakaan yang memungkinkan Anda untuk dengan mudah menanamkan (rekursif) mengunduh ke dalam aplikasi Anda sendiri.
Untuk menjawab pertanyaan Anda:
mget --num-threads=4 [url]
MEMPERBARUI
Mget sekarang dikembangkan sebagai Wget2 dengan banyak bug diperbaiki dan lebih banyak fitur (mis. Dukungan HTTP / 2).
--num-threads
sekarang--max-threads
.sumber
Saya sangat menyarankan untuk menggunakan httrack.
ex:
httrack -v -w http://example.com/
Ini akan melakukan mirror dengan 8 koneksi simultan sebagai default. Httrack memiliki banyak pilihan tempat bermain. Silahkan lihat.
sumber
Seperti yang telah disebutkan poster lainnya, saya sarankan Anda melihat aria2 . Dari halaman manual Ubuntu untuk versi 1.16.1:
Anda dapat menggunakan
-x
bendera untuk menentukan jumlah koneksi maksimum per server (default: 1):Jika file yang sama tersedia dari beberapa lokasi, Anda dapat memilih untuk mengunduh dari semuanya. Gunakan
-j
bendera untuk menentukan jumlah maksimum unduhan paralel untuk setiap URI statis (default: 5).Lihat http://aria2.sourceforge.net/ untuk informasi lebih lanjut. Untuk informasi penggunaan, halaman manual ini benar-benar deskriptif dan memiliki bagian di bagian bawah dengan contoh penggunaan. Versi online dapat ditemukan di http://aria2.sourceforge.net/manual/en/html/README.html .
sumber
wget tidak dapat mengunduh dalam banyak koneksi, sebagai gantinya Anda dapat mencoba menggunakan program lain seperti aria2.
sumber
coba pcurl
http://sourceforge.net/projects/pcurl/
menggunakan curl alih-alih wget, unduhan dalam 10 segmen secara paralel.
sumber
menggunakan
di situs web.txt cantumkan 1 url per baris, contoh:
sumber
Mereka selalu mengatakan itu tergantung tetapi ketika datang ke mirroring sebuah situs web Httrack terbaik ada . Ini sangat cepat dan mudah digunakan. Satu-satunya downside adalah itu disebut forum dukungan tetapi Anda dapat menemukan cara Anda menggunakan dokumentasi resmi . Ini memiliki kedua antarmuka GUI dan CLI dan Mendukung cookie hanya membaca dokumen Ini adalah yang terbaik. (Jadilah menyembuhkan dengan alat ini Anda dapat mengunduh seluruh web pada hard drive Anda)
Secara default, jumlah maksimum koneksi simultan terbatas pada 8 untuk menghindari server berlebih
sumber
gunakan
xargs
untuk membuatwget
bekerja di banyak file secara paralelOpsi Aria2, Cara yang benar bekerja dengan file yang lebih kecil dari 20mb
-k 2M
pisahkan file menjadi 2mb chunk-k
atau--min-split-size
memiliki nilai default 20mb, jika Anda tidak menetapkan opsi dan file di bawah 20mb, ia hanya akan berjalan dalam satu koneksi tidak peduli berapa pun nilainya-x
atau-s
sumber
make
dapat diparalelkan dengan mudah (misalnya,make -j 4
). Sebagai contoh, inilah cara sederhana yangMakefile
saya gunakan untuk mengunduh file secara paralel menggunakan wget:sumber
Pertimbangkan untuk menggunakan Regular Expressions atau FTP Globbing . Dengan itu Anda bisa mulai wget beberapa kali dengan berbagai kelompok karakter nama file mulai tergantung pada frekuensi kemunculannya.
Ini misalnya bagaimana saya menyinkronkan folder antara dua NAS:
Wget pertama menyinkronkan semua file / folder dimulai dengan
0, 1, 2... F, G, H
dan utas kedua menyinkronkan yang lainnya.Ini adalah cara termudah untuk menyinkronkan antara NAS dengan satu port ethernet 10G (10.0.0.100) dan NAS dengan dua port ethernet 1G (10.0.0.10 dan 10.0.0.11). Saya mengikat kedua benang wget
--bind-address
ke port ethernet yang berbeda dan menyebutnya paralel dengan meletakkan&
di akhir setiap baris. Dengan itu saya dapat menyalin file besar dengan 2x 100 MB / s = 200 MB / s secara total.sumber