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

130

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

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

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf
Sourav
источник

Ответы:

227

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

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

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

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

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

meawoppl
источник
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 {}"
Маурисио Санчес
10
xargs -i wget 'http://{}'  < your_list
Флориан Диш
источник
9

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

parallel --gnu -a urlfile wget

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

yxogenium
источник
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
DreamCoder
источник
3
Это не работает. wget -i links.txtэто правильная команда.
Хери
Нет, это не правильная команда. Правильная команда такова: "cat links.txt | wget -i"
DreamCoder
0

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

xargs -a download_file -L1 wget

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

Кайл Фелипе
источник