![Anleitung: Gleichzeitige cURL-Downloads?](https://rvso.com/image/1539560/Anleitung%3A%20Gleichzeitige%20cURL-Downloads%3F.png)
Wie können wir curl verwenden, um mehrere Dateien gleichzeitig herunterzuladen? Selbst wenn wir mehrere curl-Prozesse starten müssen, wie kann ich das über die Befehlszeile oder eine Shell-Funktion tun? Beispiel:
$ multiCurl <download 1> <download 2> <download 3>
multiCurl () {
curl <download 1>
curl <download 2>
curl <download 3>
}
oder
for link in $(cat download.list); do
curl <link 1>
curl <link 2>
curl <link 3>
curl <link 4>
done
Antwort1
Möglicherweise können Sie den Befehl verwenden, parallel
um mehrere Dateien gleichzeitig herunterzuladen.
Hier gehe ich davon aus, dass Sie den ursprünglichen Dateinamen reservieren
#!/usr/bin/env bash
funcDownloadOperation(){
link="${1:-}"
curl -fsSL -O "${link}"
if [[ -s "${link##*/}" ]]; then
echo "file ${link##*/} download successfully!"
else
echo "fail to download link ${link}"
fi
}
export -f funcDownloadOperation
cat download.list | parallel -k -j 0 funcDownloadOperation
Sie müssen das Dienstprogramm parallel
manuell in Ihrem Linux-System installieren.
Antwort2
Fügen Sie einfach &
am Ende jedes Befehls hinzu, um ihn im Hintergrund auszuführen:
curl <link 1>&
Schließlich kommt es darauf an, ob Sie zusätzlich wissen möchten, wann diese Befehle enden und was ihr Rückgabecode ist. Wenn ja, können Sie etwas wie Folgendes versuchen:
set -a pids # Array of the process ids of background commands
for url in $whatever_the_list_of_urls
do
curl $url& # start CURL in background
pids[${#pids[*]}]=$! # remember PID
done
# all started, now wait for them
for pid in ${pids[*]}
do
wait $pid
print "Sensed end of $pid, rc:=$?"
done