wget命令

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的比较 #

wgetcurl是两个常用的命令行下载工具,它们有一些不同的特点:

特性 wget curl
递归下载 支持 不直接支持
断点续传 支持 支持
多协议支持 HTTP, HTTPS, FTP 多种协议
上传功能 不支持 支持
脚本友好性 中等
默认行为 下载到文件 输出到标准输出
并行下载 不直接支持 不直接支持
后台运行 支持 不直接支持

注意事项 #

  1. 使用wget进行大规模爬取可能会给服务器带来负担,请遵循网站的robots.txt规则。

  2. 某些网站可能会阻止或限制wget的访问,可以使用--user-agent选项模拟浏览器。

  3. 使用-r(递归)选项时要小心,特别是与-H(跨越主机)结合使用时,可能会下载大量不需要的文件。

  4. 下载受密码保护的内容时,密码可能会显示在进程列表中,对于敏感内容,考虑使用配置文件或环境变量。

  5. 在使用--mirror选项时,确保有足够的磁盘空间。

提示 #

  • 使用-c选项可以继续之前中断的下载,这对于大文件特别有用
  • 使用--limit-rate选项可以限制下载速度,避免占用过多带宽
  • 使用-b选项可以在后台下载,日志会写入wget-log文件
  • 使用-N选项可以只下载比本地文件新的文件,这对于定期更新很有用
  • 使用--wait--random-wait选项可以在下载之间添加延迟,减轻服务器负担
  • 使用-P选项可以指定下载文件的保存位置
  • 使用--reject--accept选项可以过滤要下载的文件类型
  • 在脚本中使用wget时,通常使用-q选项减少输出
  • 使用--spider选项可以检查链接是否有效,而不实际下载文件
  • 使用-S选项可以查看服务器响应头,这对于调试很有用