![¿Cómo: descargas simultáneas de cURL?](https://rvso.com/image/1539560/%C2%BFC%C3%B3mo%3A%20descargas%20simult%C3%A1neas%20de%20cURL%3F.png)
¿Cómo podemos usar curl para descargar varios archivos al mismo tiempo? Incluso si necesitamos generar múltiples procesos curl, ¿cómo puedo hacerlo desde la línea de comando o la función de shell? Por ejemplo:
$ multiCurl <download 1> <download 2> <download 3>
multiCurl () {
curl <download 1>
curl <download 2>
curl <download 3>
}
o
for link in $(cat download.list); do
curl <link 1>
curl <link 2>
curl <link 3>
curl <link 4>
done
Respuesta1
Quizás puedas usar el comando parallel
para descargar varios archivos al mismo tiempo.
Aquí asumo que reserva el nombre del archivo original.
#!/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
Debe instalar la utilidad parallel
manualmente en su sistema Linux.
Respuesta2
Simplemente agregue &
al final de cada comando para que se ejecute en segundo plano:
curl <link 1>&
Al fin y al cabo todo depende si además quieres saber cuándo finalizan estos comandos y cuál es su código de retorno. Si es así, quieres probar algo como:
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