У меня есть файл со всеми URL-адресами, с которых мне нужно скачать. Однако мне нужно ограничивать одну загрузку за раз. т.е. следующая загрузка должна начаться только после завершения предыдущей. Возможно ли это с помощью curl? Или я должен использовать что-нибудь еще.
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.
xargs -n 1 curl -O < your_files.txt
Это возможно с помощью curl в сценарии оболочки, что-то вроде этого, но вам нужно самостоятельно изучить соответствующие параметры для curl и т. Д.
while read URL
curl some options $URL
if required check exit status
take appropriate action
done <fileontainingurls
На основе ответа @iain, но с использованием правильного сценария оболочки -
while read url; do
echo "== $url =="
curl -sL -O "$url"
done < list_of_urls.txt
Также будет работать со странными символами, такими как амперсанды и т. Д.
Может заменить -O
с перенаправлением в файл вместо этого или как угодно.