10分钟掌握Bash文件下载神器:wget与curl实战对比
你是否还在为命令行下载文件时选择wget还是curl而纠结?是否遇到过断点续传失败、进度条不显示、中文文件名乱码等问题?本文将通过10个实战场景,帮你彻底搞懂这两个工具的差异与适用场景,读完你将能够:
- 快速选择最适合当前任务的下载工具
- 解决90%的命令行下载常见问题
- 掌握5个提升效率的高级技巧
- 获得可直接复用的10+实用命令模板
核心差异速览
| 特性 | wget | curl | 最佳实践 |
|---|---|---|---|
| 设计目标 | 专注文件下载 | 多功能数据传输 | 简单下载用wget,API交互用curl |
| 断点续传 | 原生支持(-c) | 需要手动实现(-C -) | wget更便捷 |
| 递归下载 | 内置支持(-r) | 需配合find/xargs | wget优势明显 |
| 进度显示 | 默认显示 | 需要手动开启(-#) | curl进度条更美观 |
| 并发连接 | 不支持 | 通过-x参数支持 | 多文件下载选curl |
| 安装情况 | 部分系统默认缺失 | 几乎所有系统预装 | 脚本优先考虑curl |
基础下载命令对比
1. 最简单的单文件下载
wget方式:
wget https://example.com/file.iso
curl方式:
curl -O https://example.com/file.iso
注意:curl必须加-O参数才能保存文件,否则会直接输出到终端。这是初学者最容易犯的错误。
2. 自定义保存文件名
wget方式:
wget -O backup.zip https://example.com/latest.zip
curl方式:
curl -o backup.zip https://example.com/latest.zip
记忆技巧:wget用大写O(output),curl用小写o(output),参数位置也不同(wget在URL前,curl在URL后)
高级功能实战
断点续传与大文件下载
当下载中断或需要暂停时,断点续传功能非常重要:
wget方式:
wget -c https://example.com/large_file.tar.gz
curl方式:
curl -C - -O https://example.com/large_file.tar.gz
项目实战:在temp_repo/utility-bash-scripts/目录中,我们提供了增强版断点续传脚本,支持自动检测工具并选择最优命令。
批量下载与镜像站点
wget递归下载整个站点:
wget -r -np -k https://example.com/docs/
- -r: 递归下载
- -np: 不进入父目录
- -k: 转换页面中的链接为本地链接
curl多文件下载:
curl -O https://example.com/file{1..5}.txt
企业级应用技巧
1. 限速下载避免影响他人
wget方式:
wget --limit-rate=200k https://example.com/bigfile.iso
curl方式:
curl --limit-rate 200k -O https://example.com/bigfile.iso
2. 带Cookie的认证下载
wget方式:
wget --load-cookies cookies.txt https://example.com/private.zip
curl方式:
curl -b cookies.txt -O https://example.com/private.zip
安全提示:避免在命令行直接传递密码,建议使用环境变量或配置文件。项目中的hello.sh演示了安全的凭证管理方式。
3. 后台下载与日志记录
wget方式:
wget -b -o download.log https://example.com/long_download.iso
tail -f download.log # 查看实时进度
curl方式:
curl -O https://example.com/long_download.iso > download.log 2>&1 &
jobs # 查看后台任务
常见问题解决方案
中文文件名乱码问题
wget解决方案:
wget --local-encoding=UTF-8 https://example.com/中文文件.zip
curl解决方案:
curl -O -J https://example.com/中文文件.zip
- -J参数会从HTTP头中获取正确的文件名
代理环境配置
wget方式:
# 临时生效
export http_proxy=http://proxy:8080
wget https://example.com/file.txt
# 永久配置(编辑/etc/wgetrc)
http_proxy = http://proxy:8080
https_proxy = http://proxy:8080
curl方式:
# 临时生效
curl -x http://proxy:8080 -O https://example.com/file.txt
# 永久配置(编辑~/.curlrc)
proxy=http://proxy:8080
工具选择决策树
总结与最佳实践
- 日常下载首选wget:语法简单,参数直观,特别适合新手和服务器环境
- 脚本编写优先curl:兼容性更好,几乎所有Linux系统预装
- 大文件必用断点续传:wget -c或curl -C -,避免重复下载
- 敏感操作添加日志:使用-o参数记录下载过程,便于排查问题
- 复杂需求封装脚本:参考项目中的dropbox_uploader.sh实现更高级的下载逻辑
建议收藏本文,并结合项目提供的utility-bash-scripts实践练习。你有哪些下载技巧或踩坑经历?欢迎在评论区分享,点赞过50将更新"下载自动化与监控"进阶教程。
扩展资源
- 官方文档:README.md
- 高级脚本示例:temp_git_sh/
- 贡献指南:contributing.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



