GNU/Linux >> Linux Esercitazione >  >> Linux

Download parallelo utilizzando l'utilità della riga di comando Curl

Bene, curl è solo un semplice processo UNIX. Puoi avere tanti di questi curl processi in esecuzione in parallelo e che inviano i loro output a file diversi.

curl può utilizzare la parte del nome file dell'URL per generare il file locale. Basta usare il -O opzione (man curl per i dettagli).

Potresti usare qualcosa di simile al seguente

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

La mia risposta è un po' in ritardo, ma credo che tutte le risposte esistenti siano un po' insufficienti. Il modo in cui faccio cose del genere è con xargs , che è in grado di eseguire un numero specificato di comandi nei sottoprocessi.

La battuta che userei è, semplicemente:

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

Questo merita qualche spiegazione. L'uso di -n 1 istruisce xargs per elaborare un singolo argomento di input alla volta. In questo esempio, i numeri 1 ... 10 vengono elaborati ciascuno separatamente. E -P 2 dice xargs per mantenere sempre in esecuzione 2 sottoprocessi, ognuno dei quali gestisce un singolo argomento, fino a quando tutti gli argomenti di input non sono stati elaborati.

Puoi pensare a questo come MapReduce nella shell. O forse solo la fase Mappa. Indipendentemente da ciò, è un modo efficace per portare a termine un sacco di lavoro assicurandoti di non bombardare la tua macchina. È possibile fare qualcosa di simile in un ciclo for in una shell, ma finire per eseguire la gestione dei processi, il che inizia a sembrare piuttosto inutile una volta che ti rendi conto di quanto follemente fantastico questo uso di xargs è.

Aggiornamento:sospetto che il mio esempio con xargs potrebbe essere migliorato (almeno su Mac OS X e BSD con -J bandiera). Con GNU Parallel, anche il comando è un po' meno ingombrante:

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

Linux
  1. Usando la forza sulla riga di comando di Linux

  2. Disinstallare Node.JS utilizzando la riga di comando di Linux?

  3. utilità della riga di comando per stampare le statistiche dei numeri in Linux

  4. Utilizzo del certificato client nel comando Curl

  5. Ubuntu:utilizzo di curl per scaricare un'immagine

Come scaricare un file su Ubuntu usando la riga di comando

Come scaricare file su Debian usando curl e wget sulla riga di comando

Come scaricare un file su Ubuntu Linux usando la riga di comando

Come scaricare file con il comando Curl in Linux

Come scaricare file in Rocky Linux 8 sulla riga di comando usando wget

15 pratici esempi di comandi cURL di Linux (esempi di download di cURL)