Télécharger les URL répertoriées dans un fichier en utilisant curl? [fermé]

15

J'ai un fichier contenant toutes les URL à partir desquelles je dois télécharger. Cependant, je dois limiter un téléchargement à la fois. c'est-à-dire que le téléchargement suivant ne devrait commencer qu'une fois le précédent terminé. Est-ce possible en utilisant curl? Ou devrais-je utiliser autre chose.

Dev
la source
3
Bonjour et bienvenue sur serverfault. Lorsque vous posez des questions sur ce site, n'oubliez pas que nous ne sommes pas à votre place et que nous ne pouvons pas deviner quel environnement vous utilisez. Dans ce cas, vous n'avez pas spécifié le système d'exploitation que vous utilisez, ce qui rendra votre réponse difficile.
Stephane

Réponses:

20
xargs -n 1 curl -O < your_files.txt
Grumdrig
la source
2
C'est la meilleure réponse. Bien que le demandeur n'ait pas précisé, il est probablement sûr de supposer que les réponses pour toutes les URL doivent être écrites dans des fichiers individuels. Utilisez l' -Ooption avec cURL pour ce faire. xargs -n 1 curl -O < your_file.txt
LS
Je suis d'accord. Donc édité.
Grumdrig
C'est vraiment ce dont j'ai besoin.
vu ledang
19

wget(1) fonctionne séquentiellement par défaut, et a cette option intégrée:

   -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
la source
3
Étant donné que le demandeur voulait savoir comment procéder à l'aide de cURL, vous devez au moins inclure une solution qui tente de l'utiliser.
LS
4

C'est possible en utilisant curl dans un script shell, quelque chose comme ça, mais vous devrez rechercher par vous-même les options appropriées pour curl, etc.

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls
user9517
la source
2
Je comprends que c'est un demi-pseudocode mais je pense que la boucle while doit toujours avoir un "do".
nwk
1
@nwk c'est entièrement un pseudocode et je ne suis pas d'accord.
user9517
Et si une URL contient des esperluettes? Seront-ils échappés? Sans s'échapper, le shell pensera que la commande doit être exécutée en arrière-plan.
Jagger
2

Basé sur la réponse @iain, mais en utilisant un script shell approprié -

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

Fonctionne également avec des personnages étranges comme les esperluettes, etc.

Peut remplacer le -Opar une redirection vers un fichier à la place, ou tout ce qui convient.

Evgeny
la source