GNU/Linux >> Tutoriels Linux >  >> Linux

Téléchargement parallèle à l'aide de l'utilitaire de ligne de commande Curl

Eh bien, curl n'est qu'un simple processus UNIX. Vous pouvez avoir autant de ces curl processus s'exécutant en parallèle et envoyant leurs sorties vers différents fichiers.

curl peut utiliser la partie nom de fichier de l'URL pour générer le fichier local. Utilisez simplement le -O choix (man curl pour plus de détails).

Vous pouvez utiliser quelque chose comme ce qui suit

urls="http://example.com/?page1.html http://example.com?page2.html" # add more URLs here

for url in $urls; do
   # run the curl job in the background so we can start another job
   # and disable the progress bar (-s)
   echo "fetching $url"
   curl $url -O -s &
done
wait #wait for all background jobs to terminate

Ma réponse est un peu tardive, mais je pense que toutes les réponses existantes sont un peu courtes. La façon dont je fais des choses comme ça est avec xargs , qui est capable d'exécuter un nombre spécifié de commandes dans les sous-processus.

Le one-liner que j'utiliserais est simplement :

$ seq 1 10 | xargs -n1 -P2 bash -c 'i=$0; url="http://example.com/?page${i}.html"; curl -O -s $url'

Cela mérite quelques explications. L'utilisation de -n 1 ordonne xargs pour traiter un seul argument d'entrée à la fois. Dans cet exemple, les nombres 1 ... 10 sont chacune traitées séparément. Et -P 2 dit xargs pour garder 2 sous-processus en cours d'exécution en permanence, chacun gérant un seul argument, jusqu'à ce que tous les arguments d'entrée aient été traités.

Vous pouvez considérer cela comme MapReduce dans le shell. Ou peut-être juste la phase Carte. Quoi qu'il en soit, c'est un moyen efficace de faire beaucoup de travail tout en veillant à ne pas bombarder votre machine. Il est possible de faire quelque chose de similaire dans une boucle for dans un shell, mais finit par faire de la gestion de processus, ce qui commence à sembler assez inutile une fois que vous réalisez à quel point cette utilisation de xargs est incroyablement géniale est.

Mise à jour :je soupçonne que mon exemple avec xargs pourrait être amélioré (au moins sur Mac OS X et BSD avec le -J drapeau). Avec GNU Parallel, la commande est également un peu moins compliquée :

parallel --jobs 2 curl -O -s http://example.com/?page{}.html ::: {1..10}

Linux
  1. Utilisation de la force sur la ligne de commande Linux

  2. 4 outils pour télécharger n'importe quel fichier en utilisant la ligne de commande sous Linux

  3. Comment télécharger des fichiers depuis la ligne de commande à l'aide de la commande wget ?

  4. Désinstaller Node.JS à l'aide de la ligne de commande Linux ?

  5. Ubuntu :Utiliser curl pour télécharger une image

Comment télécharger un fichier sur Ubuntu à l'aide de la ligne de commande

Comment télécharger des fichiers sur Debian en utilisant curl et wget sur la ligne de commande

Comment télécharger un fichier sur Ubuntu Linux à l'aide de la ligne de commande

Comment télécharger des fichiers avec la commande Curl sous Linux

Comment télécharger des fichiers dans Rocky Linux 8 sur la ligne de commande à l'aide de wget

15 exemples pratiques de commandes Linux cURL (exemples de téléchargement cURL)