wget 是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS和FTP协议下载。它是非交互式的,可以在后台运行,适合用于脚本中自动下载文件。wget具有强大的功能,包括断点续传、递归下载、限制带宽等。
wget [选项] [URL...]
| 选项 | 说明 |
|---|---|
-O 文件名 |
将下载的文件保存为指定文件名 |
-P 目录 |
将文件下载到指定目录 |
-c |
断点续传,继续下载未完成的文件 |
-b |
后台下载,将wget置于后台运行 |
-q |
静默模式,不显示下载信息 |
-v |
详细输出,显示详细的下载信息 |
-r或--recursive |
递归下载,下载整个网站或目录 |
-l 深度 |
设置递归下载的深度(默认为5) |
-np |
不追溯到父目录,仅在当前目录递归 |
-A 扩展名列表 |
只下载指定扩展名的文件 |
-R 扩展名列表 |
排除指定扩展名的文件 |
--limit-rate=速度 |
限制下载速度(如 100k, 1m) |
-t 次数 |
设置重试次数(0为无限重试) |
--timeout=秒数 |
设置超时时间 |
-i 文件 |
从文件读取URL列表进行批量下载 |
--user=用户名 |
设置FTP/HTTP用户名 |
--password=密码 |
设置FTP/HTTP密码 |
-U 代理字符串 |
设置用户代理标识 |
--no-check-certificate |
不检查SSL证书(用于HTTPS) |
下载单个文件到当前目录:
# 下载文件,使用默认文件名
wget https://example.com/file.zip
# 下载文件并指定保存的文件名
wget -O download.zip https://example.com/file.zip
# 下载文件到指定目录
wget -P /home/user/downloads https://example.com/file.zip
如果下载中断,可以继续下载:
# 开始下载一个大文件
wget https://example.com/large-file.iso
# 如果下载中断,使用-c继续下载
wget -c https://example.com/large-file.iso
在后台下载文件,不显示输出:
# 后台下载
wget -b https://example.com/large-file.iso
# 静默模式下载,不显示任何信息
wget -q https://example.com/file.zip
# 后台静默下载,并将输出保存到日志文件
wget -b -q -o download.log https://example.com/file.zip
下载整个网站或目录:
# 递归下载网站,深度为2
wget -r -l 2 https://example.com/
# 递归下载,但不追溯到父目录
wget -r -np https://example.com/path/
# 递归下载,限制只下载HTML和图片文件
wget -r -A "*.html,*.jpg,*.png" https://example.com/
# 递归下载,排除特定类型文件
wget -r -R "*.zip,*.exe" https://example.com/
从文件读取URL列表进行批量下载:
# 创建URL列表文件
cat > urls.txt << EOF
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
EOF
# 从文件读取URL列表进行下载
wget -i urls.txt
# 批量下载并保存到不同文件名
wget -O file1.zip https://example.com/download?file=1 \
-O file2.zip https://example.com/download?file=2 \
-O file3.zip https://example.com/download?file=3
# 限制下载速度为100KB/s
wget --limit-rate=100k https://example.com/large-file.iso
# 限制下载速度为1MB/s
wget --limit-rate=1m https://example.com/large-file.iso
# 设置超时时间为30秒,重试5次
wget --timeout=30 -t 5 https://example.com/file.zip
# 无限重试,直到下载成功
wget -t 0 https://example.com/file.zip
下载需要认证的文件:
# FTP下载,需要用户名和密码
wget --user=ftpuser --password=ftppass ftp://example.com/file.zip
# HTTP基础认证下载
wget --user=user --password=pass https://example.com/protected/file.zip
# 将密码放在环境变量中更安全
export MY_PASS="mypassword"
wget --user=user --password=$MY_PASS https://example.com/file.zip
# 下载大文件,分割成多个部分(需要服务器支持Range头)
wget -c --tries=0 --retry-connrefused https://example.com/large-file.iso
# 不检查SSL证书(自签名证书或测试环境)
wget --no-check-certificate https://self-signed.example.com/file.zip
# 指定自定义用户代理
wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124" \
https://example.com/file.zip
# 递归下载,转换为本地浏览的链接
wget -r -k https://example.com/
# 递归下载,并转换链接为相对路径
wget -r -k -p https://example.com/
# 递归下载,同时下载页面所需的所有资源(CSS, JS, 图片等)
wget -r -k -p -np -E https://example.com/
# 递归下载,限制总文件大小
wget -r --quota=100m https://example.com/
wget的配置文件位于 /etc/wgetrc 和用户目录的 ~/.wgetrc,可以设置默认选项:
# ~/.wgetrc 示例配置
# 默认使用断点续传
continue = on
# 设置重试次数
tries = 10
# 限制下载速度
limit_rate = 1m
# 设置默认输出目录
dir_prefix = ~/downloads
# 安静模式
quiet = on
# 不检查证书
check_certificate = off
-c选项以便断点续传--limit-rate限速--no-check-certificate选项会降低安全性,仅建议在测试环境使用-l选项控制深度,0表示无限深度.wget-log文件记录下载信息-q静默模式,并使用退出状态码判断下载结果| 状态码 | 说明 |
|---|---|
| 0 | 成功下载,无错误 |
| 1 | 通用错误 |
| 2 | 解析错误(例如错误的URL) |
| 3 | 文件I/O错误 |
| 4 | 网络错误 |
| 5 | SSL验证错误 |
| 6 | 用户名/密码验证错误 |
| 7 | 协议错误 |
| 8 | 服务器返回错误响应 |
#!/bin/bash
# 检查wget是否安装
if ! command -v wget &> /dev/null; then
echo "wget未安装,正在安装..."
apt-get install -y wget # Debian/Ubuntu
# yum install -y wget # RHEL/CentOS
fi
# 下载文件并检查是否成功
wget -q -O /tmp/file.zip https://example.com/file.zip
if [ $? -eq 0 ]; then
echo "下载成功"
# 进一步处理文件...
else
echo "下载失败"
exit 1
fi
# 批量下载URL列表
while read url; do
filename=$(basename "$url")
wget -q -O "/downloads/$filename" "$url"
if [ $? -eq 0 ]; then
echo "已下载: $filename"
else
echo "下载失败: $url" >> error.log
fi
done < urls.txt