Fazer o download de URLs listados em um arquivo usando curl? [fechadas]

15

Eu tenho um arquivo que possui todos os URLs dos quais eu preciso baixar. No entanto, preciso limitar um download de cada vez. ou seja, o próximo download deve começar apenas quando o anterior for concluído. Isso é possível usando curl? Ou devo usar qualquer outra coisa.

Dev
fonte
3
Olá e bem-vindo ao serverfault. Ao fazer perguntas neste site, lembre-se sempre de que não estamos no seu lugar e não podemos adivinhar qual ambiente você está usando. Nesse caso, você não especificou o SO que está executando, o que dificultará a resposta.
Stephane

Respostas:

20
xargs -n 1 curl -O < your_files.txt
Grumdrig
fonte
2
Esta é a melhor resposta. Embora o autor da pergunta não tenha especificado, provavelmente é seguro assumir que as respostas para todos os URLs devem ser gravadas em arquivos individuais. Use a -Oopção com cURL para fazer isso. xargs -n 1 curl -O < your_file.txt
LS
Concordo. Então editado.
Grumdrig
Isso é realmente o que eu preciso.
vu Ledang
19

wget(1) funciona sequencialmente por padrão e tem essa opção integrada:

   -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.
dawud
fonte
3
Como o solicitante deseja saber como fazer isso usando cURL, você deve incluir pelo menos uma solução que tente usá-lo.
LS
4

Isso é possível usando curl em um script de shell, algo assim, mas você precisará pesquisar as opções apropriadas para curl, etc.

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls
user9517
fonte
2
Entendo que esse é um meio pseudocódigo, mas acho que o loop while ainda deve ter um "do".
Nwk 19/09/14
1
@nwk é totalmente pseudocódigo e eu discordo.
user9517
E se um URL contiver e comercial? Eles serão escapados? Sem escapar, o shell pensará que o comando deve ser executado em segundo plano.
Jagger
2

Com base na resposta @iain, mas usando scripts de shell adequados -

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

Também funcionará com caracteres estranhos como e comercial, etc ...

Pode substituir o -Oredirecionamento para um arquivo ou o que for adequado.

Evgeny
fonte