MacOS 终端高效压缩大目录指南:告别慢速度,充分利用多核CPU
在使用 macOS 时,我们常会遇到需要打包压缩大目录的场景——比如备份项目文件、传输大型数据集等。默认的终端压缩工具多为单线程,处理大目录时不仅速度慢,还会浪费多核 CPU 的性能。今天就分享一套高效解决方案,让你在终端里快速压缩大目录,兼顾速度与压缩体积。
一、核心方案:tar + pigz 并行压缩(首选)
macOS 自带的 gzip 是单线程压缩工具,处理几 GB 甚至几十 GB 的大目录时,效率极低。而 pigz(parallel gzip)作为 gzip 的多线程升级版,能充分调用 CPU 所有核心并行工作,压缩速度比默认工具快 5~10 倍,是处理大目录的最优选择。
1. 前置准备:安装 pigz(需先装 Homebrew)
pigz 不自带 macOS 系统,需要通过包管理器安装。这里推荐用 Homebrew(macOS 最常用的包管理器),如果还没安装 Homebrew,先执行以下命令安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Homebrew 安装完成后,执行以下命令安装 pigz:
brew install pigz2. 快速压缩大目录的核心命令
我们用 tar 工具负责“打包”目录(不压缩),再通过管道将打包后的内容交给 pigz 进行多线程压缩,命令如下:
# 通用格式(替换【待压缩目录路径】和【输出文件名】即可使用)
tar -cf - 待压缩目录路径 | pigz -9 -p $(sysctl -n hw.ncpu) > 输出文件名.tar.gz3. 命令参数详解(搞懂每一步,灵活调整)
tar -cf - 待压缩目录路径:tar 是 macOS 自带的打包工具,这里负责将目录完整打包(不做压缩操作)。其中-cf -表示“将打包后的内容输出到标准输出”,为后续的 pigz 压缩铺路;pigz -9 -p $(sysctl -n hw.ncpu):核心压缩命令,参数针对性优化大目录压缩:-9:最高压缩级别(压缩率最优,能最大程度减小文件体积;如果追求极致速度,可换成-1,速度最快但压缩率稍低);-p $(sysctl -n hw.ncpu):自动识别你的 CPU 核心数,并用全部核心并行压缩(比如 8 核 CPU 就用 8 线程,无需手动指定);
> 输出文件名.tar.gz:将压缩后的最终内容写入指定文件,后缀.tar.gz是标准的 tar+gzip 压缩格式,兼容性强。
4. 直接可用的示例(复制修改即可)
假设要压缩的大目录是 ~/Documents/项目备份目录,想把压缩后的文件保存到桌面,命名为 项目备份_2026.tar.gz,直接执行以下命令:
tar -cf - ~/Documents/项目备份目录 | pigz -9 -p $(sysctl -n hw.ncpu) > ~/Desktop/项目备份_2026.tar.gz5. 配套解压命令(兼容普通工具)
用 pigz 压缩的文件,既可以用 pigz 快速解压,也能兼容普通的 tar 解压工具(方便在没有 pigz 的环境中使用):
# 快速解压(利用多线程,和压缩速度匹配)
pigz -d -p $(sysctl -n hw.ncpu) 项目备份_2026.tar.gz
# 兼容解压(无 pigz 时可用,单线程)
tar -xzf 项目备份_2026.tar.gz二、备选方案:无 Homebrew 时的自带工具方案
如果因为权限问题无法安装 Homebrew 和 pigz,也可以用 macOS 自带的 zip 工具。虽然是单线程,但操作简单,适合应急或小体量的大目录(几 GB 内)。
# 快速压缩(牺牲一点压缩率换速度,适合紧急场景)
zip -r -1 输出文件名.zip 待压缩目录路径
# 高压缩率(速度慢,适合不着急、想尽量减小体积的场景)
zip -r -9 输出文件名.zip 待压缩目录路径参数说明:-r 表示“递归压缩”,会自动包含子目录里的所有文件;-1(最快)到 -9(最优压缩)是压缩级别,可根据需求调整。
三、进阶技巧:压缩前排除无用文件,进一步减小体积
很多大目录里会包含缓存文件、日志文件、临时文件等无用内容,压缩前排除这些文件,既能减小最终压缩包体积,还能提升压缩速度。
1. tar + pigz 排除示例(排除 .log 日志和 .tmp 临时文件)
tar -cf - 待压缩目录路径 --exclude="*.log" --exclude="*.tmp" | pigz -9 -p $(sysctl -n hw.ncpu) > 输出文件名.tar.gz2. zip 排除示例(排除 node_modules 依赖目录)
zip -r -9 输出文件名.zip 待压缩目录路径 -x "*/node_modules/*"提示:--exclude 和 -x 后面可以跟通配符(如 *.log)或具体目录路径(如 */node_modules/*),根据自己的目录结构调整即可。
四、总结:不同场景的选择建议
处理 10GB 以上大目录:优先用
tar + pigz方案,多线程压缩能节省大量时间;压缩级别选择:追求速度用
-1,追求小体积用-9(默认-6是速度和压缩率的平衡,可省略不写);无 Homebrew 环境:用自带 zip 工具应急,适合中小体量的大目录;
必做优化:压缩前先排除无用文件/目录,效率和体积都会更优。
按照上面的方法操作,无论是备份大项目还是传输大型文件,都能大幅提升终端压缩的效率,告别漫长的等待~