bash管道极限

bash管道极限,bash,sed,limit,pipe,wget,Bash,Sed,Limit,Pipe,Wget,我得到了一个要下载的URL的txt列表 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 我的内存满了,完全阻塞了我的电脑。 Any1知道如何将同时创建的管道限制为10个吗?您不是在创建管道(|),而是在创建后台进程

我得到了一个要下载的URL的txt列表

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
我的内存满了,完全阻塞了我的电脑。
Any1知道如何将同时创建的管道限制为10个吗?

您不是在创建管道(
|
),而是在创建后台进程(
&
)。每次
执行其主体时,您都会创建一个新的
wget
进程,而不是等待它退出,这(取决于
end
的值)可能会非常快地创建很多
wget
进程。可以按顺序执行(删除
&
),也可以尝试

顺便说一句,
cat
的无用用法:您只需执行以下操作:

end=`wc -l done1`

您不是在创建管道(
|
),而是在创建后台进程(
&
)。每次
执行其主体时,您都会创建一个新的
wget
进程,而不是等待它退出,这(取决于
end
的值)可能会非常快地创建很多
wget
进程。可以按顺序执行(删除
&
),也可以尝试

顺便说一句,
cat
的无用用法:您只需执行以下操作:

end=`wc -l done1`
我有一个txt列表的网址,我想下载。。。我想做得更快

所以这里有一个最短的方法。以下命令从并行运行10个线程的文件*txt\u list\u of\u URL*中包含的列表中下载URL:

xargs -a txt_list_of_urls -P 10 -r -n 1 wget -nv
我有一个txt列表的网址,我想下载。。。我想做得更快

所以这里有一个最短的方法。以下命令从并行运行10个线程的文件*txt\u list\u of\u URL*中包含的列表中下载URL:

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

$@中ARG的
;如果[“$NPROC”-GE4],则执行命令$ARG&NPROC=$($NPROC+1));然后等待NPROC=0 fi完成
如何将此与上面的代码结合?直接在您的
wget之后&行,放在下面:
NPROC=$($NPROC+1));如果[“$NPROC”-通用电气4];然后等待;NPROC=0;fi
这将并行执行
wget
,一旦有四个正在运行,它将等待,直到它们全部完成。然后继续生成下一个;如果[“$NPROC”-GE4],则执行命令$ARG&NPROC=$($NPROC+1));然后等待NPROC=0 fi完成
如何将此与上面的代码结合?直接在您的
wget之后&行,放在下面:
NPROC=$($NPROC+1));如果[“$NPROC”-通用电气4];然后等待;NPROC=0;fi
这将并行执行
wget
,一旦有四个正在运行,它将等待,直到它们全部完成。然后继续生成下一个命令。
xargs
是一个非常强大的命令。您应该在
manxargs
上了解更多信息
xargs
是一个非常强大的命令。您应该在
man xargs
上了解更多关于此的信息。