Это работает для меня:
$ xargs -n 1 curl -O < urls.txt
Я во FreeBSD. Ваши xargs могут работать по-другому.
Обратите внимание, что это работает последовательно curl
с, что вы можете считать излишне тяжелым. Если вы хотите сохранить некоторые из этих служебных данных, в bash может работать следующее:
$ mapfile -t urls < urls.txt
$ curl "${urls[@]/#/-O }"
Это сохранит ваш список URL в массив, а затем расширит массив с параметрами до curl
, чтобы вызвать загрузку целей. Команда curl
может взять несколько URL-адресов и извлечь все из них, перезапуская существующее соединение (HTTP / 1.1), но для этого требуется опция -O
перед каждым, чтобы загрузить и сохранить каждую цель .
Или, если вы используете оболочку POSIX, а не bash:
$ curl $(printf ' -O %s' $(cat urls.txt))
Это зависит от поведения printf
повторения шаблона формата для исчерпания списка аргументов данных; не все автономные printf
s будут делать это.
Обратите внимание, что этот не-xargs метод также может столкнуться с системными ограничениями для очень больших списков URL. Исследуйте ARG_MAX и MAX_ARG_STRLEN , если это вызывает озабоченность.