GNU/Linux >> Znalost Linux >  >> Linux

Paralelní stahování pomocí nástroje příkazového řádku Curl

No, curl je jen jednoduchý proces UNIX. Těchto curl můžete mít tolik paralelně běžící procesy a odesílání svých výstupů do různých souborů.

curl můžete použít část názvu souboru adresy URL ke generování místního souboru. Stačí použít -O možnost (man curl podrobnosti).

Můžete použít něco jako následující

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

Moje odpověď je trochu opožděná, ale věřím, že všechny existující odpovědi jsou jen trochu krátké. Způsob, jakým dělám takové věci, je xargs , který je schopen spouštět zadaný počet příkazů v podprocesech.

Jednovrstvý, který bych použil, je jednoduše:

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

To si zaslouží určité vysvětlení. Použití -n 1 pokyn xargs pro zpracování jednoho vstupního argumentu najednou. V tomto příkladu čísla 1 ... 10 jsou zpracovány každý samostatně. A -P 2 říká xargs aby byly neustále spuštěny 2 podprocesy, z nichž každý zpracovává jeden argument, dokud nebudou zpracovány všechny vstupní argumenty.

Můžete si to představit jako MapReduce v shellu. Nebo možná jen fáze mapy. Bez ohledu na to je to účinný způsob, jak odvést spoustu práce a přitom zajistit, že svůj stroj nerozbombardujete. Je možné udělat něco podobného ve smyčce for v shellu, ale skončíte tím, že budete dělat správu procesů, což se začne zdát docela zbytečné, jakmile si uvědomíte, jak šíleně skvělé je toto použití xargs je.

Aktualizace:Mám podezření, že můj příklad s xargs by mohl být vylepšen (alespoň na Mac OS X a BSD s -J vlajka). S GNU Parallel je příkaz také o něco méně nepraktický:

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

Linux
  1. Stáhněte si videa z YouTube v příkazovém řádku systému Linux pomocí youtube-dl

  2. Jak vypnout nebo restartovat Linux pomocí příkazového řádku

  3. Jak stáhnout celý ftp web pomocí příkazového řádku?

  1. Jak restartovat Linux pomocí příkazového řádku

  2. Jak stáhnu soubory z příkazového řádku pomocí příkazu wget?

  3. Použití klientského certifikátu v příkazu Curl

  1. Stáhněte si soubor na Ubuntu pomocí příkazového řádku v systému Ubuntu 20.04

  2. Stahujte soubory přes příkazový řádek v Linuxu

  3. 4 nástroje ke stažení libovolného souboru pomocí příkazového řádku v Linuxu