使用 wget 并行下载多个文件

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 的回答对小型ij. 但是,考虑到问题的大小ij问题,您可能希望限制产生的进程总数。您可以使用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)

  • 使用`parallel` 看起来很酷很简单,谢谢! (2认同)