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
选项进行批量下载。
-
创建包含 URL 的文本文件(例如
urls.txt
):https://example.com/file1.zip
https://example.com/file2.txt
https://example.com/file3.pdf -
使用
-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 登录凭据。这样可以避免在命令行中直接输入用户名和密码。
-
创建
.netrc
文件:bash
touch ~/.netrc
chmod 600 ~/.netrc # 设置权限,只有所有者可读写 -
编辑
.netrc
文件,添加以下内容(替换为您的实际凭据):```
machine example.com
login your_username
password your_passwordmachine 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 的文件:
-
使用浏览器登录网站,并导出 Cookie 到文件(例如
cookies.txt
)。不同浏览器导出 Cookie 的方法不同,通常可以通过开发者工具或插件实现。 -
使用
--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
结合 grep
和 sed
等工具来自动下载播客:
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
结合使用,进行计划任务下载。
-
编辑 crontab:
bash
crontab -e -
添加以下行(例如,每天凌晨 3 点下载文件):
0 3 * * * wget -b https://example.com/daily_backup.zip
这将在每天的3:00 AM 执行wget命令。
6. 总结
wget
是一个功能强大且灵活的命令行下载工具。通过本教程,您已经学习了 wget
的基本用法、常用选项、高级功能以及实际应用场景。掌握 wget
将使您能够更高效地从网络上获取所需的文件和资源。
请记住,wget
只是一个工具,如何使用它取决于您的具体需求。通过不断实践和探索,您将能够充分利用 wget
的强大功能。