Bash

使用 shell 腳本進行多執行緒下載

  • June 18, 2017

假設我有一個包含很多 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 分鐘內完成了測試。但你應該有一個大致的想法。

引用自:https://serverfault.com/questions/248143