Bash
使用 shell 腳本進行多執行緒下載
假設我有一個包含很多 URL 的文件,我想使用任意數量的程序並行下載它們。我怎樣才能用 bash 做到這一點?
看看
man xargs
:
-P max-procs --max-procs=max-procs
Run up to max-procs processes at a time; the default is 1. If max-procs is 0, xargs will run as many processes as possible at a time.
解決方案:
xargs -P 20 -n 1 wget -nv <urs.txt
如果您只想獲取每個 URL(無論數字多少),那麼答案很簡單:
#!/bin/bash URL_LIST="http://url1/ http://url2/" for url in $URL_LIST ; do wget ${url} & >/dev/null done
如果您只想創建有限數量的拉動,例如 10 個。那麼您將執行以下操作:
#!/bin/bash URL_LIST="http://url1/ http://url2/" function download() { touch /tmp/dl-${1}.lck wget ${url} >/dev/null rm -f /tmp/dl-${1}.lck } for url in $URL_LIST ; do while [ 1 ] ; do iter=0 while [ $iter -lt 10 ] ; do if [ ! -f /tmp/dl-${iter}.lck ] ; then download $iter & break 2 fi let iter++ done sleep 10s done done
請注意,我實際上並沒有對其進行測試,而是在 15 分鐘內完成了測試。但你應該有一個大致的想法。