Завантажити URL-адреси, перелічені у файлі, за допомогою curl? [зачинено]


15

У мене є файл із усіма URL-адресами, з яких мені потрібно завантажити. Однак мені потрібно обмежити одне завантаження одночасно. тобто наступне завантаження має розпочатися лише після завершення попереднього. Чи можливо це за допомогою curl? Або я повинен використовувати щось інше.


3
Привіт, ласкаво просимо до сервера за замовчуванням. Задаючи питання на цьому сайті, будь ласка, завжди пам’ятайте, що ми не на вашому місці і не можемо здогадатися, яке середовище ви використовуєте. У цьому випадку ви не вказали, яку ОС ви працюєте, що зробить вам відповідь належним чином.
Стефан

Відповіді:


20
xargs -n 1 curl -O < your_files.txt

2
Це найкраща відповідь. Хоча запитувач не вказав, можливо, можна припустити, що відповіді на всі URL-адреси мають бути записані в окремі файли. Для цього скористайтеся -Oопцією cURL. xargs -n 1 curl -O < your_file.txt
LS

Я згоден. Так відредаговано.
Grumdrig

Це дійсно те, що мені потрібно.
vu ledang

19

wget(1) працює послідовно за замовчуванням і має вбудовану цю опцію:

   -i file
   --input-file=file
       Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

       If this function is used, no URLs need be present on the command line.  If there are URLs both on the command line and in an input file, those on the command lines will be the first ones to be retrieved.  If
       --force-html is not specified, then file should consist of a series of URLs, one per line.

       However, if you specify --force-html, the document will be regarded as html.  In that case you may have problems with relative links, which you can solve either by adding "<base href="url">" to the documents
       or by specifying --base=url on the command line.

       If the file is an external one, the document will be automatically treated as html if the Content-Type matches text/html.  Furthermore, the file's location will be implicitly used as base href if none was
       specified.

3
Оскільки запитувач хотів знати, як це зробити за допомогою cURL, вам слід принаймні включити рішення, яке намагається його використовувати.
LS

4

Це можливо, використовуючи curl у сценарії оболонки, щось подібне, але вам потрібно вивчити відповідні варіанти curl тощо для себе

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls

2
Я розумію, що це половина псевдокоду, але я думаю, що в циклі все-таки має бути "зробити".
nwk

1
@nwk це повністю псевдокод, і я не згоден.
користувач9517

Що робити, якщо URL-адреса містить розширення? Чи врятуються вони? Не виходячи з оболонки, подумають, що команду слід виконувати у фоновому режимі.
Джаггер

2

На основі відповіді @iain, але за допомогою правильного сценарію оболонки -

while read url; do
  echo "== $url =="
  curl -sL -O "$url"
done < list_of_urls.txt

Також буде працювати з дивними персонажами, такими як амперсанд тощо.

Замість цього можна замінити -Oпереадресацію у файл, або що завгодно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.