Я не вижу, как это помогает загрузить веб-сайт - похоже, он загружает только 1 файл. Если это правда - голоса должны быть -ве.
Стивен
8
Я согласен, это не очень хороший ответ, потому что aria2 не может выполнять зеркалирование через web или ftp как wget или lftp. lftp выполняет зеркалирование, а также поддерживает несколько соединений.
анахронист
9
Не забудьте -sуказать количество разделений и -kуказать минимальный размер на разделенный сегмент, иначе вы никогда не достигнете -xмаксимального количества подключений.
Боб
2
@Stephen это для того, чтобы загружать очень большие файлы с веб-сайтов намного быстрее , используя несколько сокетов на сервере вместо одного. Это не значит, что вы можете соскрести сайт.
Габейо
не поддерживает носки *
Fedcomp
111
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
Ник
Спасибо за уточнение параметров, Ник.
thomas.han
4
Опция -s больше не разделяет файл с одного сервера с версии 1.10. Нужно использовать --max-connection-per-server вместе, чтобы принудительно установить несколько соединений. См. Документацию 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
Сокращение обновления @ SamuelLi aria2c -x 4 -k 1M urlдля меня хорошо работает (сервер с лимитом 100 КБ на соединение позволяет мне загружать 400 КБ с указанными параметрами)
EkriirkE
Критически, aria2это не поддерживает рекурсивные загрузки HTTP, что делает его замену некачественных для wgetесли -rтребуется.
user2943160
55
Поскольку параллель GNU еще не упоминалась, позвольте мне дать другой способ:
Это интересный подход. Не очень применимо, когда вам нужно скачать огромный файл и вы получаете ограниченную скорость на соединение, но может быть полезно при загрузке нескольких файлов.
Никола Петкански
Выполнение этой команды запустит список 8 раз, нет? Я сделал это так же, и вместо обработки каждой строки с 8 параллелями, он просто обрабатывает весь список 8 раз.
ДоменыРекомендуемые
4
Нет, это разбивает список на 8 рабочих мест
Николай Шмырев
Хорошо, я определенно делаю что-то странное. Разберусь. Спасибо за быстрый ответ.
ДоменыРекомендуемые
1
Это бесполезное использованиеcat , хотя. В этом ограниченном контексте это совершенно безвредно, но, возможно, вы не хотите использовать этот антипаттерн.
В процессе загрузки нескольких тысяч файлов журналов с одного сервера на другой у меня внезапно возникла необходимость выполнить серьезную многопоточную загрузку в BSD, предпочтительно с Wget, поскольку это был самый простой способ справиться с этим. Немного оглядываясь, привело меня к этому маленькому самородку:
Просто повторите wget -r -np -N [url]для столько потоков, сколько вам нужно ... Теперь, учитывая, что это не красиво, и, конечно, есть лучшие способы сделать это, но если вы хотите что-то быстрое и грязное, это должно сработать ...
Примечание: эта опция -Nпозволяет wgetзагружать только «новые» файлы, что означает, что она не будет перезаписывать или перезагружать файлы, если их временная метка не изменяется на сервере.
Но разве это не загружает весь набор артефактов для каждого процесса?
Кай Маттерн
10
@KaiMattern: добавьте -ncопцию «no clobber» - она заставляет wget игнорировать некоторые загруженные (даже частично) файлы.
SF.
1
У меня был список изображений, которые мне нужно было загрузить, и это тоже сработало: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncочень уродливо, но эй, это работает. : P
Джаред
1
Если одно из этих соединений по какой-то причине разорвано, вы получите незавершенные файлы, не затронутые другими соединениями. Этот метод создает проблемы целостности.
Мухаммед
-bФлаг будет запускать процесс Wget в фоновом режиме, в качестве альтернативы колотить по &контролю работы встроенного. STDOUT будет записан в wget-log, если -o <filename>он не указан. Хорошо для сценариев. Смотрите wget (1) для более подробной информации.
Пол
21
Еще одна программа, которая может сделать это axel.
axel -n <NUMBER_OF_CONNECTIONS> URL
Для байсового HTTP-аутентификации,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
Аксель не может выполнить базовую аутентификацию 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).
какие-либо советы о том, как установить wget2 на Mac? Сайт только документирует, как установить его из исходного кода и не может получить автоматическую точку
Крис
В нашем скрипте TravisCI мы используем homebrew для установки gettext (который включает в себя autopoint). Взгляните на .travis_setup.sh из репозитория wget2.
rockdaboot
13
Я настоятельно рекомендую использовать httrack.
например: httrack -v -w http://example.com/
Это сделает зеркало с 8 одновременными подключениями по умолчанию. Httrack имеет множество вариантов, где играть. Посмотри.
@ aaa90210: Было бы здорово, если бы вы кратко объяснили недостатки программы. Комментарий ArturBodera гораздо более информативен.
Ричард
@ArturBodera Вы можете добавить файл cookies.txt в папку, из которой запускается ваша программа, и она автоматически добавит эти файлы cookie в заголовок загрузки.
Bertoncelj1
httrack не поддерживает следующие перенаправления
Chris Hunt
11
Как уже упоминалось в других постерах, я бы посоветовал вам взглянуть на aria2 . Со страницы руководства Ubuntu для версии 1.16.1:
aria2 - это утилита для скачивания файлов. Поддерживаемые протоколы: HTTP (S), FTP, BitTorrent и Metalink. aria2 может загрузить файл из нескольких источников / протоколов и пытается использовать вашу максимальную пропускную способность. Он поддерживает одновременную загрузку файлов с HTTP (S) / FTP и BitTorrent, в то время как данные, загруженные с HTTP (S) / FTP, загружаются в рой BitTorrent. Используя контрольные суммы фрагментов Metalink, aria2 автоматически проверяет фрагменты данных при загрузке файла, такого как BitTorrent.
Вы можете использовать -xфлаг, чтобы указать максимальное количество соединений на сервер (по умолчанию: 1):
aria2c -x 16 [url]
Если один и тот же файл доступен в нескольких местах, вы можете загрузить его со всех. Используйте -jфлаг, чтобы указать максимальное количество параллельных загрузок для каждого статического URI (по умолчанию: 5).
Они всегда говорят, что это зависит, но когда дело доходит до зеркалирования веб-сайта, лучшее существует httrack . Это супер быстро и легко работать. Единственный недостаток - это так называемый форум поддержки, но вы можете найти свой путь, используя официальную документацию . Он имеет как 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, правильный способ работы с файлом размером менее 20 МБ
aria2c -k 2M -x 10 -s 10 [url]
-k 2M разделить файл на 2 МБ
-kили --min-split-sizeимеет значение по умолчанию 20 МБ, если вы не установите эту опцию и файл меньше 20 МБ, он будет работать только в одном соединении независимо от того, какое значение -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
Подумайте об использовании регулярных выражений или FTP-глобинга . Таким образом, вы можете запускать wget несколько раз с разными группами начальных символов имени файла в зависимости от их частоты появления.
Вот, например, как я синхронизирую папку между двумя NAS:
Первый wget синхронизирует все файлы / папки, начиная с, 0, 1, 2... F, G, Hа второй поток синхронизирует все остальное.
Это был самый простой способ синхронизации между NAS с одним портом Ethernet 10G (10.0.0.100) и NAS с двумя портами Ethernet 1G (10.0.0.10 и 10.0.0.11). Я связал два потока wget --bind-addressс разными портами Ethernet и назвал их параллельными, поставив &в конце каждой строки. Таким образом я смог скопировать огромные файлы с общей скоростью 2x 100 МБ / с = 200 МБ / с.
Ответы:
используйте aria2:
http://aria2.sourceforge.net
Я люблю это !!
источник
-s
указать количество разделений и-k
указать минимальный размер на разделенный сегмент, иначе вы никогда не достигнете-x
максимального количества подключений.Wget не поддерживает множественные сокетные соединения для ускорения загрузки файлов.
Я думаю, что мы можем сделать немного лучше, чем gmarian ответ.
Правильный способ заключается в использовании
aria2
.источник
-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
для меня хорошо работает (сервер с лимитом 100 КБ на соединение позволяет мне загружать 400 КБ с указанными параметрами)aria2
это не поддерживает рекурсивные загрузки HTTP, что делает его замену некачественных дляwget
если-r
требуется.Поскольку параллель GNU еще не упоминалась, позвольте мне дать другой способ:
источник
cat
, хотя. В этом ограниченном контексте это совершенно безвредно, но, возможно, вы не хотите использовать этот антипаттерн.Я нашел (наверное) решение
Примечание: эта опция
-N
позволяетwget
загружать только «новые» файлы, что означает, что она не будет перезаписывать или перезагружать файлы, если их временная метка не изменяется на сервере.источник
-nc
опцию «no clobber» - она заставляет wget игнорировать некоторые загруженные (даже частично) файлы.wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
очень уродливо, но эй, это работает. : P-b
Флаг будет запускать процесс Wget в фоновом режиме, в качестве альтернативы колотить по&
контролю работы встроенного. STDOUT будет записан в wget-log, если-o <filename>
он не указан. Хорошо для сценариев. Смотрите wget (1) для более подробной информации.Еще одна программа, которая может сделать это
axel
.Для байсового HTTP-аутентификации,
Страница справочника Ubuntu .
источник
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.
например:
httrack -v -w http://example.com/
Это сделает зеркало с 8 одновременными подключениями по умолчанию. Httrack имеет множество вариантов, где играть. Посмотри.
источник
Как уже упоминалось в других постерах, я бы посоветовал вам взглянуть на aria2 . Со страницы руководства Ubuntu для версии 1.16.1:
Вы можете использовать
-x
флаг, чтобы указать максимальное количество соединений на сервер (по умолчанию: 1):Если один и тот же файл доступен в нескольких местах, вы можете загрузить его со всех. Используйте
-j
флаг, чтобы указать максимальное количество параллельных загрузок для каждого статического URI (по умолчанию: 5).Посмотрите на http://aria2.sourceforge.net/ для получения дополнительной информации. Для получения информации об использовании, страница справочника действительно описательна и имеет раздел внизу с примерами использования. Онлайн-версию можно найти по адресу http://aria2.sourceforge.net/manual/en/html/README.html .
источник
Wget не может загрузить несколько соединений, вместо этого вы можете попробовать использовать другую программу, такую как aria2.
источник
попробуй pcurl
http://sourceforge.net/projects/pcurl/
использует curl вместо wget, загружает в 10 сегментах параллельно.
источник
использование
в website.txt укажите 1 URL в строке, например:
источник
Они всегда говорят, что это зависит, но когда дело доходит до зеркалирования веб-сайта, лучшее существует httrack . Это супер быстро и легко работать. Единственный недостаток - это так называемый форум поддержки, но вы можете найти свой путь, используя официальную документацию . Он имеет как GUI, так и интерфейс CLI, и поддерживает куки, просто читайте документы. Это лучшее. (Будьте осторожны с этим инструментом, вы можете загрузить всю сеть на свой жесткий диск).
По умолчанию максимальное количество одновременных подключений ограничено 8, чтобы избежать перегрузки сервера
источник
использовать
xargs
дляwget
параллельной работы в нескольких файлахПараметры Aria2, правильный способ работы с файлом размером менее 20 МБ
-k 2M
разделить файл на 2 МБ-k
или--min-split-size
имеет значение по умолчанию 20 МБ, если вы не установите эту опцию и файл меньше 20 МБ, он будет работать только в одном соединении независимо от того, какое значение-x
или-s
источник
make
можно легко распараллелить (например,make -j 4
). Например, вот простой пример,Makefile
который я использую для параллельной загрузки файлов с помощью wget:источник
Подумайте об использовании регулярных выражений или FTP-глобинга . Таким образом, вы можете запускать wget несколько раз с разными группами начальных символов имени файла в зависимости от их частоты появления.
Вот, например, как я синхронизирую папку между двумя NAS:
Первый wget синхронизирует все файлы / папки, начиная с,
0, 1, 2... F, G, H
а второй поток синхронизирует все остальное.Это был самый простой способ синхронизации между NAS с одним портом Ethernet 10G (10.0.0.100) и NAS с двумя портами Ethernet 1G (10.0.0.10 и 10.0.0.11). Я связал два потока wget
--bind-address
с разными портами Ethernet и назвал их параллельными, поставив&
в конце каждой строки. Таким образом я смог скопировать огромные файлы с общей скоростью 2x 100 МБ / с = 200 МБ / с.источник