GNU/Linux >> Tutoriales Linux >  >> Linux

Descarga paralela usando la utilidad de línea de comando Curl

Bueno, curl es solo un proceso UNIX simple. Puedes tener tantos de estos curl procesos que se ejecutan en paralelo y envían sus resultados a diferentes archivos.

curl puede usar la parte del nombre de archivo de la URL para generar el archivo local. Solo usa el -O opción (man curl para más detalles).

Podrías usar algo como lo siguiente

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

Mi respuesta es un poco tardía, pero creo que todas las respuestas existentes se quedan un poco cortas. La forma en que hago cosas como esta es con xargs , que es capaz de ejecutar un número específico de comandos en subprocesos.

La frase de una sola línea que usaría es, simplemente:

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

Esto amerita alguna explicación. El uso de -n 1 instruye xargs para procesar un solo argumento de entrada a la vez. En este ejemplo, los números 1 ... 10 cada uno se procesa por separado. Y -P 2 le dice a xargs para mantener 2 subprocesos ejecutándose todo el tiempo, cada uno manejando un solo argumento, hasta que se hayan procesado todos los argumentos de entrada.

Puede pensar en esto como MapReduce en el shell. O tal vez solo la fase del Mapa. De todos modos, es una forma efectiva de hacer mucho trabajo mientras se asegura de no bombardear su máquina. Es posible hacer algo similar en un bucle for en un shell, pero terminar haciendo la gestión de procesos, lo que comienza a parecer bastante inútil una vez que te das cuenta de lo increíblemente bueno que es este uso de xargs es.

Actualización:sospecho que mi ejemplo con xargs podría mejorarse (al menos en Mac OS X y BSD con el -J bandera). Con GNU Parallel, el comando también es un poco menos difícil de manejar:

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

Linux
  1. Cómo apagar o reiniciar Linux usando la línea de comandos

  2. Descargar archivos a través de la línea de comandos en Linux

  3. Cómo reiniciar Linux usando la línea de comandos

  4. 4 herramientas para descargar cualquier archivo usando la línea de comandos en Linux

  5. ¿Cómo descargo archivos desde la línea de comandos usando el comando wget?

Cómo descargar un archivo en Ubuntu usando la línea de comandos

Cómo descargar archivos en Debian usando curl y wget en la línea de comandos

Cómo descargar un archivo en Ubuntu Linux usando la línea de comandos

Cómo descargar archivos con el comando Curl en Linux

Cómo descargar archivos en Rocky Linux 8 en la línea de comandos usando wget

15 ejemplos prácticos de comandos cURL de Linux (ejemplos de descarga de cURL)