Скачать файлы из списка


130

Как я могу скачать файлы (которые перечислены в текстовом файле) с помощью wgetили каким-либо другим автоматическим способом?

Пример списка файлов:

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf

Ответы:


227

В wget есть встроенный флаг для этого: wget -i your_list вы можете найти такие вещи, прочитавman wget


@aureianimus если я хочу пропустить ссылку 2, то как?
Алхелал

Это решение сработало для меня. Я был счастлив с его загрузкой последовательно, а не параллельно.
asiby

85

Получить их параллельно с

cat urlfile | parallel --gnu "wget {}"

По умолчанию он будет запускать столько процессов, сколько у вас есть ядер, вы можете увеличить его еще в 10 раз, если вы действительно хотите быстро их уменьшить, добавив «-j 20» после параллели.


1
Я, например, просто не могу заставить его работать. Я не вижу ни одного порожденного процесса, переключение эха для wget ничего не выдает
Jakub Bochenski

У некоторых более ранних убунтов есть тупой дефект в этом пространстве: stackoverflow.com/questions/16448887/…
meawoppl

2
Обратите внимание: «он будет запускать столько процессов, сколько у вас есть ядер» - пропускная способность сети, скорее всего, станет более ограничивающим фактором.
Уилф

2
Это действительно зависит. Для большого количества маленьких файлов это может быть почти на порядок быстрее, так как большая часть времени передачи - это рукопожатие / TCP в обоих направлениях. Также в ситуации, когда вы скачиваете с нескольких небольших хостов, иногда пропускная способность для каждого соединения ограничена, поэтому это может привести к увеличению производительности.
Meawoppl

2
Это очень полезно, если вы хотите использовать список относительных URL-адресов (идентификатор ресурса без имен хостов) с разными именами хостов, например: cat urlfile | параллельный --gnu "wget example1.com {}" и cat urlfile | параллель --gnu "wget example2.com {}"
Маурисио Санчес


9

parallelимеет встроенный флаг --arg-file( -a), который будет использовать входной файл в качестве источника, так что вы можете избежать cat |. Вы можете использовать

parallel --gnu -a urlfile wget

Или просто parallel --gnu wget < urlfile


5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

где list.txt - ваш список файлов


4

Я видел ответ Флориана Диша.

Я получил его на работу, включив параметр bqcв команду.

xargs -i wget -bqc 'http://{}' < download.txt

Все загрузки начались параллельно в фоновом режиме.

  • -b: Фон. Перейти к фону сразу после запуска
  • -q: Тихий. Отключить вывод wget
  • -c: Продолжить. Продолжить получение частично загруженного файла

1

Файл ссылки links.txt

Команда для загрузки всех файлов ссылок

cat links.txt | wget -i

3
Это не работает. wget -i links.txtэто правильная команда.
Хери

Нет, это не правильная команда. Правильная команда такова: "cat links.txt | wget -i"
DreamCoder

0

Я только что проверил это:

xargs -a download_file -L1 wget

Меня устраивает. Ссылки внутри txt файла должны быть в отдельных строках.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.