Пакетная загрузка URL-адресов из многопоточной командной строки

3740
William Entriken

У меня есть 100 000 URL-адресов небольших файлов для загрузки. Хотелось бы использовать 10 нитей и конвейерная обработка является обязательным условием. Я объединяю результат в один файл. Текущий подход:

cat URLS | xargs -P5 -- curl >> OUTPUT 

Есть ли лучший вариант, который покажет прогресс всей операции? Должен работать из командной строки.

3
«Я хотел бы использовать 10 потоков, и конвейерная обработка является обязательным. Я объединяю результат в один файл». Так порядок не имеет значения? Bobby 10 лет назад 0
Используйте [GNU параллельный] (http://www.gnu.org/software/parallel/), он даже будет поддерживать порядок вывода. Если вы пометите свой вопрос соответствующим образом, вам может повезти, и [автор] (http://superuser.com/users/41337/ole-tange) может вмешаться ;-) Adrian Frühwirth 10 лет назад 1
Заказ не проблема. Помечено для GNU-параллельной хорошей идеи. Можно ли использовать параллель и все же получить конвейер в скручивании? William Entriken 10 лет назад 0
Разве вы не смешиваете файлы, когда делаете это? Если ваш веб-сервер не является однопоточным, я не понимаю, как вы могли бы избежать одновременной записи двух процессов в ваш выходной файл. rici 10 лет назад 0
Мангл, джамбл - все это не проблема для меня. William Entriken 10 лет назад 0

1 ответ на вопрос

3
Ole Tange
cat URLS | parallel -k -P10 curl >> OUTPUT 

или если прогресс важнее:

cat URLS | parallel -k -P10 --eta curl >> OUTPUT 

или же:

cat URLS | parallel -k -P10 --progress curl >> OUTPUT 

10-секундная установка попытается выполнить полную установку; в случае неудачи - личная установка; если это не удается, минимальная установка.

wget -O - pi.dk/3 | sh 

Посмотрите вступительное видео для быстрого ознакомления: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Я пробовал этот установщик `wget -O - pi.dk/3 | sh`, но, похоже, получил какое-то слабое оправдание за параллель, который на самом деле ничего не делает: `parallel [OPTIONS] команда - аргументы / для каждого аргумента, запускает команду с аргументом, параллельно` William Entriken 10 лет назад 0
Я должен был сначала удалить moreutils. `apt-get remove moreutils` William Entriken 10 лет назад 1

Похожие вопросы