什么是 wget?它用来做什么?

wget 是一个免费的、非交互式的网络下载器。这意味着它可以在终端或命令行界面中运行,即使您断开与用户界面的连接,下载任务也可以在后台继续进行。它被设计用于稳定可靠地从互联网上下载文件。

wget 主要用来从各种网络协议(包括 HTTP、HTTPS 和 FTP)下载文件。它可以下载单个文件、整个网站页面(进行递归下载)或文件列表。它的非交互性使其非常适合编写脚本、自动化下载任务或在远程服务器上执行下载操作。

为什么选择使用 wget 来下载文件?

相比传统的浏览器下载,使用 wget 有许多显著的优势:

  • 非交互性与自动化: wget 不需要图形界面,可以在脚本中运行,极大地便利了自动化下载或批量处理任务。您可以在后台启动下载,然后关闭终端,下载仍会继续。
  • 断点续传: 如果下载过程中连接中断,wget 支持从上次停止的地方继续下载(如果服务器支持),这对于下载大文件非常重要。
  • 稳定性与鲁棒性: 它设计用于在不稳定的网络环境下工作,能够处理间歇性连接问题并自动重试下载。
  • 批量下载: 可以通过提供一个包含多个URL的文本文件,让 wget 自动依次下载列表中的所有文件。
  • 递归下载: 能够沿着链接递归地下载整个网站或特定目录的内容,实现网站镜像或离线浏览。
  • 下载控制: 提供了丰富的选项,可以控制下载速度、设置重试次数和间隔、处理重定向、发送自定义请求头等。

因此,当您需要下载大量文件、自动化下载流程、在无头环境(如服务器)中下载,或者需要更精细地控制下载过程时,wget 是一个非常强大的工具。

在哪里可以使用 wget?文件会下载到哪里?

在哪里可以使用 wget?

wget 是一个跨平台的工具,主要用于类Unix系统,如 Linux、macOS、BSD 等。在这些系统上,它通常是默认安装的,或者可以通过包管理器轻松安装。

对于 Windows 用户,虽然没有内置 wget,但可以从官方或第三方网站下载 Windows 兼容版本,或者在提供了类Unix环境的工具中(如 Cygwin、MinGW、WSL – Windows Subsystem for Linux)使用它。

文件会下载到哪里?

默认情况下,wget 会将下载的文件保存到您当前运行命令的目录中。例如,如果您在用户的主目录 (`~`) 中运行 wget 命令,文件通常会下载到那里。

您可以通过以下两种方式指定下载位置:

  • 使用 -P--directory-prefix=目录 选项指定一个目录。下载的文件将保存在该目录中。

    wget -P /home/user/downloads http://example.com/file.zip

    这会将文件下载到 /home/user/downloads 目录下。

  • 使用 -O--output-document=文件路径 选项指定完整的保存路径和文件名。这不仅指定了保存位置,还可以为下载的文件重命名。

    wget -O /home/user/documents/my_report.pdf http://example.com/files/report.pdf

    这会将文件下载并保存为 /home/user/documents/my_report.pdf

如何使用 wget 下载文件?基础操作指南

下载单个文件

最基本的使用方式是直接跟上您要下载文件的 URL:

wget http://example.com/path/to/yourfile.tar.gz

wget 会尝试从提供的 URL 下载文件,并使用 URL 的最后一部分作为本地文件名(这里是 yourfile.tar.gz)。

如果 URL 中包含特殊字符(如空格、&符号等),或者您想避免shell解释它们,最好将 URL 用单引号或双引号括起来:

wget "http://example.com/path/to/My File With Spaces.zip"

断点续传下载

如果您正在下载一个大文件,下载中断后不希望从头开始,可以使用 -c--continue 选项:

wget -c http://example.com/very_large_file.iso

如果同名文件已经存在且大小小于远程文件,wget 会尝试从本地文件末尾继续下载。

指定保存文件名

使用 -O 选项可以给下载的文件指定一个不同的本地文件名:

wget -O custom_name.zip http://example.com/path/to/original_name.zip

这会将 original_name.zip 下载并保存为 custom_name.zip

如何使用 wget 下载多个文件或整个网站?高级操作

从文件列表批量下载

如果您有一个包含多个文件URL的文本文件(每行一个URL),可以使用 -i--input-file=文件 选项让 wget 依次下载列表中的所有文件:

首先创建一个文本文件,例如 urls.txt,内容如下:

http://example.com/file1.zip

http://example.com/documents/report.pdf

ftp://ftp.example.com/pub/software.tar.gz

然后运行命令:

wget -i urls.txt

wget 将按顺序下载文件列表中的每个 URL。

递归下载网站内容

wget 最强大的功能之一是递归下载。使用 -r--recursive 选项,wget 会从指定的 URL 开始,跟随页面中的链接,下载整个网站的部分或全部内容:

wget -r http://example.com/directory/

这将开始下载 http://example.com/directory/ 页面,然后扫描该页面中的链接,继续下载链接指向的页面和文件,如此往复,直到达到某个深度限制或不再发现新的同域链接。

常用的递归下载选项:

  • -l 深度--level=深度:指定递归的深度。-l 0 表示无限深度,默认深度通常是5。

    wget -r -l 2 http://example.com/ (只递归下载两层深度)

  • -np--no-parent:不追溯到父目录。这非常有用,可以确保只下载指定目录及其子目录的内容,而不是整个网站结构。

    wget -r -np http://example.com/downloads/ (只下载 /downloads/ 及其下的内容)

  • --accept=列表:只下载符合指定扩展名或模式的文件(例如 --accept=jpg,png,gif)。
  • --reject=列表:不下载符合指定扩展名或模式的文件。

镜像整个网站

镜像网站是递归下载的一个特殊和常用的模式。使用 -m--mirror 选项可以方便地镜像网站,它相当于同时使用了 -r-l inf (无限深度)、-N (时间戳比较)、-np--no-if-modified-since 等选项,旨在创建一个网站的本地完整副本:

wget -m http://example.com/

这会尝试下载 example.com 的所有公开内容,并根据时间戳更新本地文件。

如何控制 wget 的下载过程?速度与重试设置

wget 提供了多种选项来控制下载行为:

限制下载速度

使用 --limit-rate=速度 选项可以限制下载使用的带宽,避免占用全部网络资源。速度单位可以是 k (千字节)、m (兆字节):

wget --limit-rate=200k http://example.com/large_file.zip (限制速度为 200 KB/s)

wget --limit-rate=1m http://example.com/another_file.iso (限制速度为 1 MB/s)

设置重试次数与间隔

如果下载失败,wget 会自动重试。您可以使用 --tries=次数 控制重试的总次数(包括第一次尝试)。使用 --wait=秒数 设置每次重试之间的等待时间:

wget --tries=10 --wait=5 http://example.com/unstable_link.tar.gz

这将尝试下载最多10次,每次失败后等待5秒再重试。默认的重试次数通常是20次。

后台下载

使用 -b--background 选项可以在后台启动下载任务。wget 会立即返回命令行提示符,并在后台继续下载,下载信息会被记录在一个日志文件中(通常是 wget-log)。

wget -b http://example.com/very_large_file.zip

要查看后台任务的进度,可以查看生成的日志文件:

tail -f wget-log

使用 wget 下载时的其他常见场景

处理需要认证的链接

对于需要用户名和密码的 HTTP 或 FTP 资源,可以使用 --user=用户名--password=密码 选项:

wget --user=myuser --password=mypassword http://example.com/protected/file.zip

请注意,在命令行中直接写密码存在安全风险,特别是在共享系统上。更安全的方式可能是使用 --ask-password (wget 会提示输入密码) 或配置 .wgetrc 文件。

下载 FTP 文件

wget 同样支持 FTP 协议:

wget ftp://ftp.example.com/pub/somefile.txt

对于需要认证的 FTP,同样可以使用 --user--password 选项。

忽略 robots.txt

网站的 robots.txt 文件通常会指导网络爬虫哪些目录或文件不应被访问。wget 默认会遵守这个规则。如果您需要忽略它(请确保您有权访问相关资源),可以使用 --execute robots=off

wget -r --execute robots=off http://example.com/private/directory/

模拟浏览器(设置 User-Agent)

有些网站会检查请求的 User-Agent 头部来判断是否允许下载或提供不同内容。可以使用 --user-agent="字符串" 来模拟特定的浏览器或其他客户端:

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" http://example.com/somepage.html

查看下载进度

当您在前台运行 wget 时,它会默认显示一个进度条,显示已下载的数据量、当前下载速度、预计剩余时间等信息。


Length: 12345678 (12M) [application/zip]
Saving to: ‘yourfile.zip’

yourfile.zip 100%[===================>] 12.34M 1.23MB/s in 10s

2023-10-27 10:30:00 (1.23 MB/s) - ‘yourfile.zip’ saved [12345678/12345678]

这个进度条直观地展示了下载状态。

总的来说,wget 是一个功能强大且灵活的命令行下载工具,掌握它的基本及进阶选项,能极大地提高您在处理网络文件下载任务时的效率和控制力。


wget下载文件