在macOS系统中,命令行工具为文件压缩提供了高效灵活的操作方式,相较于图形界面,命令行操作更适合批量处理、自动化脚本及远程管理场景,macOS基于Unix系统,原生支持多种压缩格式,如tar、gzip、bzip2、zip、dmg等,通过Terminal终端即可实现快速压缩与解压,以下将详细介绍常用压缩格式的命令行操作方法、参数选项及实际应用技巧。

基础压缩命令使用
tar格式(最常用)
tar本身是一个归档工具,常与gzip(.tar.gz)、bzip2(.tar.bz2)、xz(.tar.xz)等压缩工具结合使用,其核心语法为tar [选项] [文件/目录]。
-
创建.tar.gz压缩包:
tar -czvf archive_name.tar.gz /path/to/directory_or_file
参数说明:
-c:创建新归档-z:通过gzip压缩-v:显示详细过程(verbose)-f:指定归档文件名(需放在最后)
-
解压.tar.gz文件:
(图片来源网络,侵删)tar -xzvf archive_name.tar.gz -C /path/to/extract
-x表示解压,-C指定解压目标路径(默认为当前目录)。
zip格式(跨平台兼容)
zip格式在Windows和Linux系统中广泛支持,适合跨平台文件传输。
-
创建zip压缩包:
zip -r archive_name.zip /path/to/directory
-r参数递归处理目录,避免遗漏子文件。
(图片来源网络,侵删) -
解压zip文件:
unzip archive_name.zip -d /path/to/extract
若未指定
-d,则解压至当前目录。
其他压缩格式
-
bzip2压缩(.tar.bz2):
压缩率高于gzip,但速度较慢:tar -cjvf archive.tar.bz2 target_dir tar -xjvf archive.tar.bz2
-
xz压缩(.tar.xz):
压缩率最高,适合大文件归档:tar -cJvf archive.tar.xz target_dir tar -xJvf archive.tar.xz
-
单文件快速压缩:
若仅需压缩单个文件,可直接使用gzip/bzip2/xz:gzip -k file.txt # 生成file.txt.gz,-k保留原文件 bzip2 -k file.txt # 生成file.txt.bz2 xz -k file.txt # 生成file.txt.xz
高级参数与技巧
压缩级别控制
通过参数调整压缩级别(1-9,默认6),数字越大压缩率越高但速度越慢:
gzip -1 fast.txt.gz # 最快压缩 gzip -9 slow.txt.gz # 最高压缩率
排除特定文件
使用--exclude参数排除不需要的文件或目录:
tar -czv backup.tar.gz --exclude="*.log" /data
分卷压缩
对于超大文件,可通过-l参数分割为指定大小的分卷(单位为MB):
split -b 100m large_file.tar.gz part_
解压时使用cat part_* > large_file.tar.gz合并,再执行解压命令。
压缩进度显示
使用pv工具(需通过brew install pv安装)显示实时压缩进度:
tar -c directory | pv -p -b -r -s $(du -sb directory | cut -f1) | gzip > archive.tar.gz
常见问题与解决方案
压缩时提示“Permission denied”
原因:目标文件或目录权限不足。
解决:
- 检查文件权限:
ls -l /path/to/file - 使用sudo提权(谨慎操作):
sudo tar -czvf archive.tar.gz /protected_dir
解压后文件权限丢失
原因:压缩时未保留文件属性。
解决:
- 使用
-p参数保留权限:tar -cpvf archive.tar target_dir - 或通过
chmod -R手动恢复权限:chmod -R 755 extracted_dir
相关问答FAQs
Q1: 如何在压缩时排除特定目录?
A: 使用--exclude参数结合通配符实现,压缩/project目录时排除node_modules和.git目录:
tar -czv project.tar.gz --exclude="node_modules" --exclude=".git" /project
Q2: 如何查看压缩包内的文件列表而不解压?
A: 使用-t参数列出归档内容,查看.tar.gz文件包含的文件:
tar -tzvf archive.tar.gz
对于zip格式,使用-l参数:
unzip -l archive.zip
