GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Paralleler Download mit dem Curl-Befehlszeilendienstprogramm

Nun, curl ist nur ein einfacher UNIX-Prozess. Sie können so viele dieser curl haben Prozesse, die parallel laufen und ihre Ausgaben an verschiedene Dateien senden.

curl kann den Dateinamensteil der URL verwenden, um die lokale Datei zu generieren. Verwenden Sie einfach die -O Option (man curl für Einzelheiten).

Sie könnten so etwas wie das Folgende verwenden

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

Meine Antwort ist ein bisschen spät, aber ich glaube, dass alle vorhandenen Antworten nur ein bisschen zu kurz kommen. Ich mache solche Dinge mit xargs , der in der Lage ist, eine bestimmte Anzahl von Befehlen in Unterprozessen auszuführen.

Der Einzeiler, den ich verwenden würde, ist einfach:

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

Dies rechtfertigt eine Erklärung. Die Verwendung von -n 1 weist xargs an um jeweils ein einzelnes Eingabeargument zu verarbeiten. In diesem Beispiel die Zahlen 1 ... 10 werden jeweils separat verarbeitet. Und -P 2 sagt xargs zwei Unterprozesse ständig laufen zu lassen, von denen jeder ein einzelnes Argument verarbeitet, bis alle Eingabeargumente verarbeitet wurden.

Sie können sich dies als MapReduce in der Shell vorstellen. Oder vielleicht nur die Map-Phase. Unabhängig davon ist es eine effektive Möglichkeit, viel Arbeit zu erledigen und gleichzeitig sicherzustellen, dass Sie Ihre Maschine nicht mit einer Gabel bombardieren. Es ist möglich, etwas Ähnliches in einer for-Schleife in einer Shell zu tun, aber am Ende Prozessmanagement zu betreiben, was ziemlich sinnlos erscheint, sobald Sie erkennen, wie wahnsinnig großartig diese Verwendung von xargs ist ist.

Update:Ich vermute, dass mein Beispiel mit xargs verbessert werden könnte (zumindest auf Mac OS X und BSD mit dem -J Flagge). Bei GNU Parallel ist der Befehl auch etwas weniger umständlich:

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

Linux
  1. Laden Sie YouTube-Videos in der Linux-Befehlszeile mit youtube-dl herunter

  2. Laden Sie eine Datei auf Ubuntu über die Befehlszeile auf einem Ubuntu 20.04-System herunter

  3. Laden Sie Dateien über die Befehlszeile in Linux herunter

  4. So starten Sie Linux über die Befehlszeile neu

  5. 4 Tools zum Herunterladen einer beliebigen Datei über die Befehlszeile in Linux

So laden Sie eine Datei auf Ubuntu über die Befehlszeile herunter

So laden Sie Dateien unter Debian mit curl und wget in der Befehlszeile herunter

So laden Sie eine Datei unter Ubuntu Linux über die Befehlszeile herunter

So laden Sie Dateien mit dem Curl-Befehl unter Linux herunter

So laden Sie Dateien in Rocky Linux 8 über die Befehlszeile mit wget herunter

15 praktische Beispiele für cURL-Befehle unter Linux (cURL-Download-Beispiele)