wget 入门教程,快速上手文件下载

wget 入门教程:快速上手文件下载

wget 是一个功能强大的非交互式网络下载工具,在 Linux、macOS 和 Windows (通过 Cygwin 或 WSL) 上广泛使用。它以其稳定性、灵活性和对各种网络协议的支持而闻名。无论您是需要下载单个文件、多个文件,还是整个网站,wget 都能胜任。

本教程将带您从零开始学习 wget,涵盖其基本用法、常用选项、高级功能以及实际应用场景。通过本教程,您将能够熟练使用 wget 来满足您的各种下载需求。

1. wget 简介与安装

1.1. 什么是 wget?

wget(World Wide Web Get)是一个自由、开源的命令行工具,用于从 Web 服务器下载文件。它支持 HTTP、HTTPS 和 FTP 协议,并且能够处理重定向、断点续传、后台下载等任务。wget 的非交互式特性使其非常适合在脚本中自动化下载任务。

1.2. wget 的优点

  • 非交互式: wget 可以在后台运行,无需用户干预,非常适合自动化任务。
  • 稳定性: wget 以其健壮性和可靠性而著称,即使在网络连接不稳定时也能正常工作。
  • 断点续传: 如果下载中断,wget 可以从上次中断的地方继续下载,避免重复下载。
  • 递归下载: wget 可以递归地下载整个网站或目录,方便批量下载。
  • 支持代理: wget 可以通过 HTTP、HTTPS 和 FTP 代理服务器进行下载。
  • 广泛的协议支持: 支持 HTTP、HTTPS、FTP 以及通过 HTTP 代理的 FTP。
  • 跨平台: 可以在 Linux、macOS、Windows 等多种操作系统上使用。

1.3. 安装 wget

大多数 Linux 发行版都预装了 wget。如果没有,您可以使用包管理器轻松安装:

  • Debian/Ubuntu:

    bash
    sudo apt update
    sudo apt install wget

  • Fedora/CentOS/RHEL:

    bash
    sudo dnf install wget

  • Arch Linux:

    bash
    sudo pacman -S wget

  • macOS (使用 Homebrew):

    bash
    brew install wget

  • 验证安装:

安装完成后,可以通过运行以下命令来验证 wget 是否正确安装:
bash
wget --version

2. wget 基本用法

wget 的基本语法非常简单:

bash
wget [选项] [URL]

2.1. 下载单个文件

最简单的用法是下载单个文件:

bash
wget https://example.com/file.zip

这将下载 file.zip 并保存到当前目录。

2.2. 指定文件名保存

使用 -O (大写字母 O) 选项可以指定下载文件的保存名称:

bash
wget -O my_file.zip https://example.com/file.zip

这将把 file.zip 下载并保存为 my_file.zip

2.3. 断点续传

使用 -c 选项可以实现断点续传:

bash
wget -c https://example.com/large_file.zip

如果下载中断,再次运行相同的命令,wget 会从上次停止的地方继续下载。

2.4 下载多个文件

wget支持同时下载多个文件,多个URL之间用空格分隔即可:

bash
wget https://example.com/file1.zip https://example.com/file2.txt https://example.com/file3.pdf

2.5 从文件读取URL列表

可以将要下载的URL保存在一个文本文件中,每行一个URL,然后使用-i选项进行批量下载。

  1. 创建包含 URL 的文本文件(例如 urls.txt):

    https://example.com/file1.zip
    https://example.com/file2.txt
    https://example.com/file3.pdf

  2. 使用 -i 选项下载:

    bash
    wget -i urls.txt

3. wget 常用选项

wget 提供了许多选项来控制下载行为。以下是一些常用的选项:

  • -O <文件名>:指定下载文件的保存名称(如前面所述)。
  • -c:断点续传(如前面所述)。
  • -P <目录>:指定下载文件的保存目录。

    bash
    wget -P /path/to/downloads https://example.com/file.zip

    * -b:后台下载。下载开始后,wget 会在后台运行,并将输出重定向到 wget-log 文件。

    bash
    wget -b https://example.com/large_file.zip

    可以使用tail -f wget-log来跟踪下载进度.
    * --limit-rate=<速度>:限制下载速度。可以使用 k (KB/s) 或 m (MB/s) 作为单位。

    bash
    wget --limit-rate=200k https://example.com/large_file.zip

    * -t <次数>:设置重试次数。默认情况下,wget 会在连接失败时重试 20 次。

    bash
    wget -t 5 https://example.com/file.zip

    * --tries=<次数>:设置尝试连接次数。与-t参数类似,但是这个参数也包括了首次尝试.
    * -q:静默模式。wget 不会输出任何信息到终端。

    bash
    wget -q https://example.com/file.zip

    * --spider:爬虫模式。wget 不会下载任何文件,只检查 URL 是否存在。常用于检查网站链接的有效性.

    bash
    wget --spider https://example.com/file.zip

    * -r--recursive: 递归下载,下载指定网页的所有链接,包括子目录中的文件。对于下载整个网站或网站的一部分非常有用.
    * --no-parent: 与-r同时使用, 防止wget爬取到父目录。
    * -l <深度>--level=<深度>: 与-r同时使用, 指定递归下载的深度. 默认深度是5.
    bash
    wget -r -l 2 https://example.com #只下载两层深度的链接

    * -np--no-parent: 与-r同时使用, 不下载父目录.
    * -k--convert-links: 下载完成后, 将链接转换为本地链接, 方便离线浏览.
    * -U <用户代理>--user-agent=<用户代理>:设置 User-Agent。有些网站会根据 User-Agent 来限制访问,可以使用此选项伪装成浏览器。

    bash
    wget -U "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

    * --header=<HTTP 头部>:设置自定义的 HTTP 头部。

    bash
    wget --header="Authorization: Bearer <token>" https://example.com/file.zip

4. wget 高级功能

4.1. 密码保护的下载

如果下载需要用户名和密码,可以使用 --user--password 选项:

bash
wget --user=your_username --password=your_password https://example.com/protected_file.zip

或者:
bash
wget --http-user=your_username --http-password=your_password https://example.com/protected_file.zip #对于HTTP Basic Authentication
wget --ftp-user=your_username --ftp-password=your_password ftp://example.com/protected_file.zip #对于FTP

注意: 将密码直接写在命令行中是不安全的,因为密码可能会被记录在命令历史中。更好的做法是将用户名和密码保存在 .netrc 文件中(见下文)。

4.2. 使用 .netrc 文件

.netrc 文件用于存储 FTP 和 HTTP 登录凭据。这样可以避免在命令行中直接输入用户名和密码。

  1. 创建 .netrc 文件:

    bash
    touch ~/.netrc
    chmod 600 ~/.netrc # 设置权限,只有所有者可读写

  2. 编辑 .netrc 文件,添加以下内容(替换为您的实际凭据):

    ```
    machine example.com
    login your_username
    password your_password

    machine ftp.example.com
    login your_ftp_username
    password your_ftp_password
    3. 现在可以使用 `wget` 下载需要身份验证的文件,而无需指定用户名和密码:bash
    wget https://example.com/protected_file.zip
    ```

4.3. 使用 Cookie 下载

有些网站需要登录后才能下载文件,可以使用 --load-cookies 选项加载包含 Cookie 的文件:

  1. 使用浏览器登录网站,并导出 Cookie 到文件(例如 cookies.txt)。不同浏览器导出 Cookie 的方法不同,通常可以通过开发者工具或插件实现。

  2. 使用 --load-cookies 选项下载:

    bash
    wget --load-cookies cookies.txt https://example.com/protected_file.zip

    如果下载会话过期,还需要更新cookies,可以使用--save-cookies参数来保存新的cookies:
    bash
    wget --load-cookies cookies.txt --save-cookies new_cookies.txt --keep-session-cookies https://example.com/protected_file.zip

    --keep-session-cookies 参数表示保存会话cookies.

4.4. 镜像网站

wget 可以用来镜像整个网站。使用 -m (或 --mirror) 选项:
bash
wget -m https://example.com

-m选项等同于-r -N -l inf --no-remove-listing
* -r: 递归下载
* -N: 开启时间戳比较,只下载更新的文件.
* -l inf: 无限递归深度.
* --no-remove-listing: 不删除FTP服务器上的.listing文件。

注意: 镜像大型网站可能会消耗大量带宽和存储空间,请谨慎使用。

4.5. 下载指定类型的文件

可以使用-A (接受) 或 -R (拒绝) 选项来指定要下载或排除的文件类型。

bash
wget -r -A.pdf https://example.com #只下载PDF文件
wget -r -R.jpg,.png,.gif https://example.com #排除图片文件

5. 实际应用场景

5.1. 备份网站

bash
wget -m -k -p --user-agent="My Backup Script" https://example.com

这将镜像整个网站,并将链接转换为本地链接,方便离线浏览。--user-agent 选项设置了一个自定义的 User-Agent,以便网站管理员知道这是您的备份脚本。

5.2. 下载播客

许多播客提供 RSS 订阅,其中包含音频文件的链接。可以使用 wget 结合 grepsed 等工具来自动下载播客:

bash
wget -q -O - "https://example.com/podcast.rss" | grep -o 'http.*\.mp3' | wget -i -

这将从 RSS 文件中提取 MP3 链接,并使用 wget 下载。

5.3. 批量下载图片

bash
wget -r -l1 -H -A.jpg,.jpeg,.png,.gif -nd https://example.com/gallery

这将从指定图库页面下载所有图片文件,并且不创建目录。
* -r: 递归。
* -l1: 递归深度为1(只下载当前页面的链接)。
* -H: 允许跨主机下载.
* -A.jpg,.jpeg,.png,.gif: 只接受这些类型的文件.
* -nd--no-directories: 不创建目录,所有文件都下载到当前目录。

5.4 计划任务下载

wget常与crontab结合使用,进行计划任务下载。

  1. 编辑 crontab:

    bash
    crontab -e

  2. 添加以下行(例如,每天凌晨 3 点下载文件):

    0 3 * * * wget -b https://example.com/daily_backup.zip
    这将在每天的3:00 AM 执行wget命令。

6. 总结

wget 是一个功能强大且灵活的命令行下载工具。通过本教程,您已经学习了 wget 的基本用法、常用选项、高级功能以及实际应用场景。掌握 wget 将使您能够更高效地从网络上获取所需的文件和资源。

请记住,wget 只是一个工具,如何使用它取决于您的具体需求。通过不断实践和探索,您将能够充分利用 wget 的强大功能。

THE END