wget
可以下载文件。一般使用可以同时下载一个文件,某些时候我们需要下载多个文件,这个时候为了节约时间就需要并行下载文件
wget
下载文件使用
wget
下载文件相当简单:
> wget https://rumenz.com/static/v/v.mp4
这样运行一次只能下载一个文件。
不过我们可以用
shell
脚本来在一个命令中下载多个文件:
#!/bin/bash
while read file; do
wget ${file}
done < rumenz.txt
rumenz.txt
包含所有必须下载的文件,每个文件都有自己的一行:
https://rumenz.com/static/v/v.mp4
https://rumenz.com/static/v/v1.mp4
https://rumenz.com/static/v/v2.mp4
但是这种方法还是串行的下载文件,并不能节省下载时间。我们可以通过并行下载文件来加快速度。
wget
并行下载我们可以通过不同的方式并行制作
wget
下载文件。
使用
&
将wget
进程发送到后台:
#!/bin/bash
while read file; do
wget ${file} &
done < rumenz.txt
对
wget
每次调用都被派生到后台并在其自己单独的子 shell 中异步运行。尽管我们现在并行下载文件,但这种方法不能反馈出错的信息。
wget
Fork使用
-b
参数,让wget
将自己Fork到后台:
#!/bin/bash
while read file; do
wget ${file} -b
done < rumenz.txt
就像
&
运算符一样,每个调用都被派生到后台并异步运行。但不同的是-b
参数还为我们提供了每次下载的日志文件。我们可以grep
这些日志文件来检查没有发生错误。
xargs
优雅的解决方案就是使用
xargs
,可以设置同时运行的最大进程数
#!/bin/bash
cat rumenz.txt | xargs -n 1 -P 2 wget -q
使用
-q
静默方式。如果不设置xargs
会将所有进程的输出重定向到 stdout,会输出很多信息。如果没有发生错误,它将以 0 值退出,否则以 1 值退出。