Це працює для мене:
$ xargs -n 1 curl -O < urls.txt
Я у FreeBSD. Ваші ксарги можуть працювати по-різному.
Зверніть увагу, що це запускає послідовні curl
s, які ви можете розглядати як надмірно важкі. Якщо ви хочете зберегти частину цих накладних витрат, у bash може працювати наступне:
$ mapfile -t urls < urls.txt
$ curl ${urls[@]/#/-O }
Це зберігає ваш список URL-адрес у масиві, а потім розширює масив опціями, curl
щоб викликати завантаження цілей. curl
Команда може взяти кілька URL - адрес і витягти всі з них, рециркуляції існуючого з'єднання (HTTP / 1.1), але вона потребує -O
опції перед кожними з них для того , щоб завантажити і зберегти кожну мету. Зверніть увагу, що символи в деяких URL-адресах], можливо, доведеться уникати, щоб уникнути взаємодії з вашою оболонкою.
Або якщо ви використовуєте оболонку POSIX, а не bash:
$ curl $(printf ' -O %s' $(cat urls.txt))
Це покладається на printf
поведінку користувача при повторенні шаблону форматування, щоб вичерпати список аргументів даних; не всі самостійні printf
це зроблять.
Зауважте, що цей метод, не пов’язаний з xargs, також може зіткнутися з обмеженнями системи для дуже великих списків URL-адрес. Дослідження ARG_MAX і MAX_ARG_STRLEN , якщо це є проблемою.
for i in $(cat urls.txt) ; do curl -O $i ; done