在 macOS 终端中,下载文件是常见的操作,掌握相关的下载命令可以高效地完成文件传输任务,macOS 终端默认支持多种下载工具,如 curl、wget、python 等,这些工具各有特点,适用于不同的下载场景,以下将详细介绍这些命令的使用方法、参数选项及实际应用案例。

使用 curl 命令下载文件
curl 是 macOS 终端中预装的强大工具,支持 HTTP、HTTPS、FTP、FTPS 等多种协议,功能丰富且灵活。
基本语法
curl 的基本语法为 curl [选项] URL,URL 为目标文件的下载地址。
常用参数及功能
-o或--output:指定下载文件的保存名称及路径。curl -o example.txt https://example.com/example.txt将文件保存为example.txt。-O或remote-name:使用 URL 中的文件名保存。curl -O https://example.com/example.txt会直接下载并命名为example.txt。-L或location:跟随重定向,若目标 URL 发生跳转,-L会自动跟随新的地址下载。-C或continue-at:断点续传。curl -C - -O https://example.com/largefile.zip可从上次中断的位置继续下载。- 或
progress-bar:显示进度条,便于监控下载状态。 -s或silent:静默模式,不显示进度信息,适合脚本中使用。-f或fail:服务器返回错误时(如 404),不输出内容,便于脚本判断下载是否成功。
实际应用案例
-
下载单个文件并重命名:
curl -o macOS_manual.pdf https://support.apple.com/manuals/macbook-pro.pdf
此命令将苹果官方的 MacBook Pro 手册下载并保存为
macOS_manual.pdf。
(图片来源网络,侵删) -
下载文件并显示进度条:
curl -# -O https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso
会显示实时进度条,适合下载大文件时查看进度。
-
断点续传大文件:
若下载largefile.zip时因网络中断,可执行以下命令继续下载:curl -C - -O https://example.com/largefile.zip
-
通过代理下载:
若需要通过代理服务器下载,可使用-x参数:
(图片来源网络,侵删)curl -x http://proxy.example.com:8080 -O https://example.com/file.zip
使用 wget 命令下载文件
wget 是另一个流行的下载工具,虽然 macOS 终端默认未安装,但可通过 Homebrew 轻松添加。wget 的特点是支持后台下载、递归下载等功能。
安装 wget
若未安装 wget,先通过 Homebrew 安装:
brew install wget
基本语法
wget 的基本语法为 wget [选项] URL。
常用参数及功能
-O:指定保存文件名,与curl类似。-c:断点续传,与curl的-C -功能相同。--limit-rate:限制下载速度,--limit-rate=1m限制为 1MB/s。-b或background:后台下载,适合长时间任务。-r或recursive:递归下载,可下载整个网站(需配合其他参数限制范围)。-A:指定允许下载的文件类型,-A pdf,jpg仅下载 PDF 和 JPG 文件。
实际应用案例
-
安装后下载文件:
wget -O wget_help.txt https://www.gnu.org/software/wget/manual/wget.html
-
限制下载速度并后台运行:
wget --limit-rate=500k -b -O largefile.zip https://example.com/largefile.zip
此命令以 500KB/s 的速度下载,并在后台运行,日志保存在
wget-log文件中。 -
递归下载网站图片:
wget -r -A jpg,png https://example.com/gallery/
此命令会递归下载
gallery目录下的所有 JPG 和 PNG 图片。
使用 python 下载文件
若系统中安装了 Python(macOS 默认预装),可通过 Python 的 urllib 或 requests 库下载文件,适合需要自定义逻辑的场景(如处理 cookies、 headers 等)。
使用 urllib(无需额外安装)
import urllib.request
url = "https://example.com/file.zip"
output_file = "file.zip"
urllib.request.urlretrieve(url, output_file)
print(f"文件已保存为 {output_file}")
将上述代码保存为 download.py,通过终端执行 python download.py 即可下载文件。
使用 requests 库(需先安装)
若需更高级的功能(如会话管理、文件流下载),可安装 requests 库:
pip install requests
示例代码:
import requests
url = "https://example.com/largefile.zip"
output_file = "largefile.zip"
response = requests.get(url, stream=True)
with open(output_file, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"文件已保存为 {output_file}")
stream=True 表示以流式方式下载,适合大文件,避免内存占用过高。
不同下载工具的对比
以下从易用性、功能、适用场景等方面对比 curl、wget 和 python:
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| curl | 系统预装,支持协议多,参数灵活 | 语法较复杂,需记忆参数 | 简单下载、API 调用、自定义请求 |
| wget | 支持后台下载、递归下载 | 需额外安装,部分功能需配置 | 大文件下载、网站镜像、批量下载 |
| python | 灵活性高,可处理复杂逻辑 | 需编写脚本,依赖库(如 requests) | 自定义下载逻辑、处理 cookies/headers |
注意事项
- 权限问题:确保终端对目标目录有写入权限,否则下载会失败。
- 网络环境:若使用代理或需要校验 SSL 证书,需通过参数正确配置(如
curl的-x或--cacert)。 - 文件完整性:下载完成后,可通过
shasum或md5命令校验文件哈希值,确保文件未被篡改。
相关问答 FAQs
问题 1:如何使用 curl 下载文件时同时显示下载速度和预计剩余时间?
解答:通过 -l(或 --limit-rate 限制速度)和 显示进度条,curl 会自动估算剩余时间。
curl -# -l -O https://example.com/largefile.zip
若需手动限制速度(如 1MB/s),可使用:
curl --limit-rate=1m -# -O https://example.com/largefile.zip
问题 2:wget 递归下载时如何避免下载重复文件或限制层级?
解答:wget 提供了 -np(不向上遍历父目录)和 -nd(不创建目录结构)参数,以及 -l(限制层级)参数。
wget -r -np -nd -l 2 -A pdf https://example.com/docs/
此命令会递归下载 docs 目录下的 PDF 文件,最多遍历 2 层,且不创建子目录,所有文件保存在当前目录。
