dan*_*iev 8 bash wget parallelism
我有以下 bash 脚本:
for i in {0800..9999}; do
for j in {001..032}; do
wget http://example.com/"$i-$j".jpg
done
done
Run Code Online (Sandbox Code Playgroud)
所有照片都存在,实际上每次迭代都不依赖于另一个。如何在控制线程数的情况下并行化它?
Ste*_*n D 22
Confiq 的回答对小型i
和j
. 但是,考虑到问题的大小i
和j
问题,您可能希望限制产生的进程总数。您可以使用parallel
命令或某些版本的xargs
. 例如,使用支持-P
标志的 xargs可以并行化内部循环,如下所示:
for i in {0800..9999}; do
echo {001..032} | xargs -n 1 -P 8 -I{} wget http://example.com/"$i-{}".jpg
done
Run Code Online (Sandbox Code Playgroud)
当您需要更复杂的行为时,GNU parallel具有大量功能,并且可以轻松地对两个参数进行并行化:
parallel -a <(seq 0800 9999) -a <(seq 001 032) -P 8 wget http://example.com/{1}-{2}.jpg
Run Code Online (Sandbox Code Playgroud)