bash管道限制

时间:2011-06-24 10:39:32

标签: bash sed limit pipe wget

我有一个我想下载的网址列表

n=1
end=`cat done1 |wc -l`
while [ $n -lt $end ]
do
nextUrls=`sed -n "${n}p" < done1`
wget -N nH --random-wait -t 3 -a download.log -A$1 $nextUrls 
let "n++"
done

我想用管道做得更快但是如果我这样做

 wget -N nH --random-wait -t 3 -a download.log -A$1 $nextUrls &

我的ram填满并完全阻止我的电脑。 Any1知道如何将同时创建的管道限制为10个?

2 个答案:

答案 0 :(得分:4)

您没有创建管道(|),而是在创建后台进程(&)。每当while执行其正文时,您都会创建一个新的wget进程并且不要等待它退出,这可能会创建批次(取决于end的值) <{1}}的进程非常快。可以按顺序执行(删除wget),也可以尝试executing n processes in parallel and wait for them

BTW,无用的&:你可以这样做:

cat

答案 1 :(得分:1)

  

我有一个我要下载的网址列表...我希望能更快地完成..

所以这是做到这一点的最短路径。以下命令从文件* txt_list_of_urls中包含的列表中下载URL,并行运行10个线程:

xargs -a txt_list_of_urls -P 10 -r -n 1 wget -nv