wget命令 #
wget
是一个强大的命令行工具,用于从网络上下载文件。它支持HTTP、HTTPS和FTP协议,可以在非交互式环境中工作,这使它非常适合脚本和自动化任务。
语法 #
wget [选项] [URL...]
常用选项 #
选项 | 描述 |
---|---|
-V, --version |
显示版本信息 |
-h, --help |
显示帮助信息 |
-b, --background |
在后台运行 |
-e, --execute=命令 |
执行.wgetrc 风格的命令 |
-o, --output-file=文件 |
将日志写入文件 |
-a, --append-output=文件 |
将日志追加到文件 |
-d, --debug |
打印调试信息 |
-q, --quiet |
安静模式(不输出信息) |
-v, --verbose |
详细模式(默认) |
-nv, --no-verbose |
关闭详细模式,但不进入安静模式 |
-i, --input-file=文件 |
从文件中读取URL |
-F, --force-html |
将输入文件视为HTML |
-B, --base=URL |
解析相对于URL的HTML输入文件链接 |
--config=文件 |
指定配置文件 |
下载选项 #
选项 | 描述 |
---|---|
-t, --tries=数字 |
设置重试次数(0表示无限制) |
-O, --output-document=文件 |
将文档写入文件 |
-nc, --no-clobber |
不覆盖已存在的文件 |
-c, --continue |
继续下载部分下载的文件 |
-N, --timestamping |
只下载比本地文件新的文件 |
-S, --server-response |
打印服务器响应 |
--spider |
不下载任何文件 |
-T, --timeout=秒数 |
设置所有超时为秒数 |
--dns-timeout=秒数 |
设置DNS查找超时为秒数 |
--connect-timeout=秒数 |
设置连接超时为秒数 |
--read-timeout=秒数 |
设置读取超时为秒数 |
-w, --wait=秒数 |
在下载之间等待指定的秒数 |
--waitretry=秒数 |
在重试之间等待1…秒数秒 |
--random-wait |
在下载之间等待0.5…1.5*wait秒 |
--no-proxy |
明确不使用代理 |
-Q, --quota=数字 |
设置下载配额为数字(字节、k或m) |
--limit-rate=速率 |
限制下载速率为速率(字节、k或m) |
--no-dns-cache |
禁用缓存DNS查找 |
--restrict-file-names=OS |
根据操作系统限制文件名 |
--user=用户 |
设置FTP和HTTP用户名 |
--password=密码 |
设置FTP和HTTP密码 |
目录选项 #
选项 | 描述 |
---|---|
-nd, --no-directories |
不创建目录 |
-x, --force-directories |
强制创建目录 |
-nH, --no-host-directories |
不创建主机目录 |
--protocol-directories |
在目录中使用协议名称 |
-P, --directory-prefix=前缀 |
保存文件到前缀/… |
--cut-dirs=数字 |
忽略远程目录组件数 |
递归下载选项 #
选项 | 描述 |
---|---|
-r, --recursive |
指定递归下载 |
-l, --level=数字 |
最大递归深度(inf或0表示无限制) |
--delete-after |
下载后删除本地文件 |
-k, --convert-links |
将下载文件中的链接转换为本地链接 |
-K, --backup-converted |
转换文件前先备份为.orig |
-m, --mirror |
等同于-r -N -l inf –no-remove-listing |
-p, --page-requisites |
下载显示HTML页面所需的所有图像等 |
--strict-comments |
启用HTML注释的严格处理 |
递归接受/拒绝选项 #
选项 | 描述 |
---|---|
-A, --accept=列表 |
接受的文件扩展名列表,用逗号分隔 |
-R, --reject=列表 |
拒绝的文件扩展名列表,用逗号分隔 |
--accept-regex=正则表达式 |
接受匹配正则表达式的URL |
--reject-regex=正则表达式 |
拒绝匹配正则表达式的URL |
--regex-type=类型 |
正则表达式类型(posix或pcre) |
-D, --domains=列表 |
接受的域列表,用逗号分隔 |
--exclude-domains=列表 |
拒绝的域列表,用逗号分隔 |
--follow-ftp |
跟随HTML文档中的FTP链接 |
--follow-tags=列表 |
跟随的HTML标签列表,用逗号分隔 |
--ignore-tags=列表 |
忽略的HTML标签列表,用逗号分隔 |
-H, --span-hosts |
递归时跨越主机 |
-L, --relative |
只跟随相对链接 |
-I, --include-directories=列表 |
允许的目录列表 |
-X, --exclude-directories=列表 |
排除的目录列表 |
-np, --no-parent |
不追溯到父目录 |
安装 #
在某些Linux发行版中,wget
命令可能不是默认安装的。可以使用以下命令安装:
# Debian/Ubuntu
sudo apt install wget
# CentOS/RHEL
sudo yum install wget
# Fedora
sudo dnf install wget
# Arch Linux
sudo pacman -S wget
常见用法 #
1. 下载单个文件 #
wget https://example.com/file.zip
2. 下载文件并重命名 #
wget -O output.zip https://example.com/file.zip
3. 在后台下载 #
wget -b https://example.com/large_file.iso
日志将写入wget-log
文件。
4. 继续之前中断的下载 #
wget -c https://example.com/large_file.iso
5. 限制下载速度 #
wget --limit-rate=200k https://example.com/large_file.iso
6. 设置重试次数 #
wget -t 5 https://example.com/file.zip
7. 下载多个文件 #
wget https://example.com/file1.zip https://example.com/file2.zip
8. 从文件中读取URL #
wget -i urls.txt
9. 递归下载网站 #
wget -r -np -k https://example.com/
这会递归下载example.com的所有页面,不追溯到父目录,并转换链接为本地链接。
10. 镜像网站 #
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com/
或使用简短形式:
wget -mkEpnp https://example.com/
11. 只下载特定类型的文件 #
wget -r -np -A "*.pdf" https://example.com/
12. 排除特定类型的文件 #
wget -r -np -R "*.html,*.css" https://example.com/
13. 使用用户名和密码 #
wget --user=username --password=password https://example.com/private/file.zip
14. 使用HTTP代理 #
wget -e use_proxy=yes -e http_proxy=http://proxy.example.com:8080 https://example.com/file.zip
15. 设置超时 #
wget --timeout=60 https://example.com/file.zip
16. 设置用户代理 #
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" https://example.com/file.zip
17. 只检查链接是否有效 #
wget --spider https://example.com/file.zip
18. 保存到特定目录 #
wget -P /path/to/directory https://example.com/file.zip
实用示例 #
1. 下载整个网站以供离线浏览 #
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com/
2. 下载FTP目录中的所有文件 #
wget -r -np -nH ftp://ftp.example.com/pub/
3. 下载网页中的所有图片 #
wget -r -np -nd -A "*.jpg,*.png,*.gif" https://example.com/gallery/
4. 创建网站的备份 #
wget --mirror --convert-links --page-requisites --no-parent --wait=2 --limit-rate=200k https://example.com/
5. 下载文件并显示进度条 #
wget -q --show-progress https://example.com/large_file.iso
6. 下载并保持服务器上的时间戳 #
wget -N https://example.com/file.zip
7. 使用基本认证 #
wget --http-user=username --http-password=password https://example.com/private/file.zip
8. 下载特定深度的网站 #
wget -r -l 2 https://example.com/
这只会下载深度为2的页面。
9. 下载并保存服务器响应头 #
wget -S https://example.com/ 2>&1 | tee response_headers.txt
10. 批量下载按顺序编号的文件 #
wget https://example.com/file{1..10}.zip
11. 定期下载文件(结合cron使用) #
wget -N https://example.com/daily_report.pdf
12. 下载并解压文件 #
wget -qO- https://example.com/archive.tar.gz | tar xz
与curl的比较 #
wget
和curl
是两个常用的命令行下载工具,它们有一些不同的特点:
特性 | wget | curl |
---|---|---|
递归下载 | 支持 | 不直接支持 |
断点续传 | 支持 | 支持 |
多协议支持 | HTTP, HTTPS, FTP | 多种协议 |
上传功能 | 不支持 | 支持 |
脚本友好性 | 中等 | 高 |
默认行为 | 下载到文件 | 输出到标准输出 |
并行下载 | 不直接支持 | 不直接支持 |
后台运行 | 支持 | 不直接支持 |
注意事项 #
-
使用
wget
进行大规模爬取可能会给服务器带来负担,请遵循网站的robots.txt规则。 -
某些网站可能会阻止或限制
wget
的访问,可以使用--user-agent
选项模拟浏览器。 -
使用
-r
(递归)选项时要小心,特别是与-H
(跨越主机)结合使用时,可能会下载大量不需要的文件。 -
下载受密码保护的内容时,密码可能会显示在进程列表中,对于敏感内容,考虑使用配置文件或环境变量。
-
在使用
--mirror
选项时,确保有足够的磁盘空间。
提示 #
- 使用
-c
选项可以继续之前中断的下载,这对于大文件特别有用 - 使用
--limit-rate
选项可以限制下载速度,避免占用过多带宽 - 使用
-b
选项可以在后台下载,日志会写入wget-log
文件 - 使用
-N
选项可以只下载比本地文件新的文件,这对于定期更新很有用 - 使用
--wait
和--random-wait
选项可以在下载之间添加延迟,减轻服务器负担 - 使用
-P
选项可以指定下载文件的保存位置 - 使用
--reject
和--accept
选项可以过滤要下载的文件类型 - 在脚本中使用
wget
时,通常使用-q
选项减少输出 - 使用
--spider
选项可以检查链接是否有效,而不实际下载文件 - 使用
-S
选项可以查看服务器响应头,这对于调试很有用