前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux中wget并行下载文件的几种姿势

linux中wget并行下载文件的几种姿势

作者头像
入门笔记
发布2022-06-02 16:33:45
3.5K0
发布2022-06-02 16:33:45
举报
文章被收录于专栏:入门小站

wget可以下载文件。一般使用可以同时下载一个文件,某些时候我们需要下载多个文件,这个时候为了节约时间就需要并行下载文件

使用wget下载文件

使用wget下载文件相当简单:

代码语言:javascript
复制
> wget https://rumenz.com/static/v/v.mp4

这样运行一次只能下载一个文件。

不过我们可以用 shell 脚本来在一个命令中下载多个文件:

代码语言:javascript
复制
#!/bin/bash
while read file; do
    wget ${file}
done < rumenz.txt

rumenz.txt包含所有必须下载的文件,每个文件都有自己的一行:

代码语言:javascript
复制
https://rumenz.com/static/v/v.mp4
https://rumenz.com/static/v/v1.mp4
https://rumenz.com/static/v/v2.mp4

但是这种方法还是串行的下载文件,并不能节省下载时间。我们可以通过并行下载文件来加快速度。

使用 wget并行下载

我们可以通过不同的方式并行制作wget下载文件。

Bash 方法

使用&wget进程发送到后台:

代码语言:javascript
复制
#!/bin/bash
while read file; do
    wget ${file} &
done < rumenz.txt

wget每次调用都被派生到后台并在其自己单独的子 shell 中异步运行。

尽管我们现在并行下载文件,但这种方法不能反馈出错的信息。

wget Fork

使用-b参数,让wget将自己Fork到后台:

代码语言:javascript
复制
#!/bin/bash
while read file; do
    wget ${file} -b
done < rumenz.txt

就像&运算符一样,每个调用都被派生到后台并异步运行。但不同的是-b参数还为我们提供了每次下载的日志文件。我们可以grep这些日志文件来检查没有发生错误。

使用xargs

优雅的解决方案就是使用xargs,可以设置同时运行的最大进程数

代码语言:javascript
复制
#!/bin/bash
cat rumenz.txt | xargs -n 1 -P 2 wget -q

使用-q静默方式。如果不设置xargs会将所有进程的输出重定向到 stdout,会输出很多信息。如果没有发生错误,它将以 0 值退出,否则以 1 值退出。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用wget下载文件
  • 使用 wget并行下载
    • Bash 方法
      • wget Fork
        • 使用xargs
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档