| 工具 | 核心定位 | 本质功能 | 默认生成格式 | 关键限制 | 压缩 |
|---|---|---|---|---|---|
| gzip | 单文件快速压缩工具 | 仅压缩 / 解压单个文件(无归档能力) | .gz |
不支持目录、不支持多文件合并压缩 | |
压缩: gzip |
保留源文件加 -k进度加 -v |
||||
解压: gunzip/gzip -d |
保留.gz压缩包加-k进度加 -v |
||||
| tar | Linux 原生归档工具 | 仅打包文件 / 目录(无压缩能力) | .tar |
本身不压缩,需配合 gzip/bzip2/xz | |
打包(未压缩): tar -cvf |
tar -cvf files.tar photo.jpg data.csv report.pdf |
||||
提取(未压缩):tar -xvf |
tar -xvf dir.tar |
||||
打包压缩: tar -zcvf |
tar -zcvf project.tar.gz project/ |
||||
提取解压:tar -zxvf |
tar -zxvf project.tar.gz |
||||
| zip | 跨平台归档 + 压缩工具 | 打包 + 压缩一体化(支持文件 / 目录) | .zip |
默认不保留 Linux 文件权限,压缩率中等 | |
| 压缩:zip | 目录加 -r 权限加 -k进度加 -v |
||||
| 解压:unzip | 目的地 -d查看内容 -l |
性能与压缩率对比
(测试环境:Ubuntu 22.04,测试文件:1GB 日志文件 + 500MB 代码目录,取平均结果)
| 工具组合 | 压缩速度 | 压缩率(压缩后体积 / 原体积) | 解压速度 | 适用场景 |
|---|---|---|---|---|
gzip(默认级别 -6) |
最快 | 中等(约 30%-40%) | 最快 | 单个文件快速压缩、日常小文件 |
| tar.gz(tar + gzip) | 快 | 中等(约 25%-35%) | 快 | Linux 内部备份、目录压缩(平衡速度 + 体积) |
| tar.bz2(tar + bzip2) | 中等 | 较高(约 20%-30%) | 中等 | 对速度无要求、追求略高压缩率 |
| tar.xz(tar + xz) | 最慢 | 最高(约 15%-25%) | 较慢 | 大文件压缩、归档存储(优先体积) |
| zip(默认级别) | 中等 | 中等(约 28%-38%) | 中等 | 跨平台传输、小文件分享 |
1)tar 打包归档
tar 是 Linux 系统原生归档工具(核心功能是“打包”,而非“压缩”),默认仅将多个文件/目录合并为一个 .tar 归档包(不压缩体积),需配合 gzip/bzip2/xz 等压缩工具才能实现“归档+压缩”(生成 .tar.gz/.tar.bz2/.tar.xz 等常用格式)。
其核心优势是 完整保留 Linux 文件属性(权限、所有者、修改时间),是 Linux 系统备份、内部文件传输的首选工具。以下按「归档(打包)」「解压(解包)」「归档+压缩/解压+解压缩」「进阶操作」分类详解:
一、tar 核心参数(必记!)
tar 命令参数支持“组合写法”(如 -zcvf 等价于 -z -c -v -f),核心参数如下(按功能分组):
| 功能类型 | 参数 | 作用 |
|---|---|---|
| 核心操作 | -c | 创建归档包(打包) |
| -x | 提取归档包(解包/解压) | |
| -f | 指定归档包文件名(必须放在参数最后,紧跟文件名) | |
| 压缩/解压关联 | -z | 调用 gzip 压缩/解压(对应 .tar.gz/.tgz) |
-j |
调用 bzip2 压缩/解压(对应 .tar.bz2) |
|
-J |
调用 xz 压缩/解压(对应 .tar.xz) |
|
| 辅助功能 | -v | 显示操作详细过程(文件名、进度,可选但推荐) |
| -C | 解压到指定目录(默认解压到当前目录) | |
-t |
查看归档包内容(不解压/不解包) | |
--exclude |
打包时排除指定文件/目录 | |
-p |
保留文件原始权限(默认已开启,备份系统文件时建议显式添加) | |
| -h | 打包符号链接指向的原始文件(默认打包链接本身) |
二、分类 1:tar 纯归档(打包)操作(不压缩,生成 .tar)
仅将文件/目录合并为 .tar 包(体积不变),适合需先打包再单独压缩,或仅需整合文件的场景。
1. 基础语法
tar [参数] 目标归档包名.tar 要打包的文件/目录
2. 实用示例
(1)打包单个/多个文件
# 打包单个文件:生成 file.tar
tar -cvf file.tar document.txt# 打包多个文件:空格分隔,生成 files.tar
tar -cvf files.tar photo.jpg data.csv report.pdf
(2)打包目录(含子目录)
# 打包目录 dir1 及其子目录,生成 dir.tar(-v 显示打包文件列表)
tar -cvf dir.tar dir1/# 打包多个目录:同时打包 dir1 和 dir2,生成 dirs.tar
tar -cvf dirs.tar dir1/ dir2/
(3)打包时排除文件/目录
# 排除单个文件(如临时文件 temp.txt)
tar -cvf project.tar --exclude=temp.txt project/# 排除多个文件/目录(排除 .log 日志、build 编译目录)
tar -cvf project.tar --exclude="*.log" --exclude=project/build project/# 排除指定路径的文件(如 project/src/test/ 目录下所有文件)
tar -cvf project.tar --exclude=project/src/test/* project/
(4)打包时保留符号链接的原始文件
默认 tar 仅打包符号链接本身(而非链接指向的文件),加 -h 参数打包原始文件:
# 打包符号链接 link.log 指向的原始日志文件(而非链接)
tar -cvfh link.tar link.log
(5)查看 .tar 包内容(不解包)
# 简单查看文件列表
tar -tf dir.tar# 详细查看(含文件权限、大小、修改时间)
tar -tvf dir.tar
三、分类 2:tar 纯解归档(解包)操作(解压 .tar 包)
将 .tar 归档包还原为原始文件/目录(无压缩时用)。
1. 基础语法
tar [参数] 要解包的.tar文件
2. 实用示例
(1)解包到当前目录
# 解包 dir.tar 到当前目录(-v 显示解包过程)
tar -xvf dir.tar
(2)解包到指定目录(-C 参数)
目标目录不存在时需提前创建(或用 mkdir -p 自动创建):
# 解包到 /home/user/docs 目录(目录需存在)
tar -xvf dir.tar -C /home/user/docs/# 自动创建目标目录并解包(适合目录不存在的情况)
mkdir -p /tmp/unpack && tar -xvf dir.tar -C /tmp/unpack/
(3)只解包 .tar 包中的部分文件
# 仅解包 dir.tar 中的 photo.jpg 文件
tar -xvf dir.tar photo.jpg# 仅解包 dir.tar 中 dir1/docs/ 目录下的所有文件
tar -xvf dir.tar dir1/docs/
四、分类 3:tar + 压缩工具(归档+压缩/解压+解压缩)
这是 tar 最常用的场景(日常说的“tar 压缩”实际是这种组合),直接生成压缩后的归档包(如 .tar.gz),或解压该类包。
1. 归档+压缩(生成 .tar.gz/.tar.bz2/.tar.xz)
| 压缩格式 | 命令示例 | 核心特点 |
|---|---|---|
.tar.gz(最常用) |
tar -zcvf project.tar.gz project/ |
压缩速度快,压缩率中等,平衡最优 |
.tar.bz2 |
tar -jcvf data.tar.bz2 large_dir/ |
压缩率比 gzip 高,速度稍慢 |
.tar.xz(高压缩率) |
tar -Jcvf backup.tar.xz /home/user/ |
压缩率最高,速度最慢,适合大文件存储 |
示例说明:
- 压缩目录
project/为.tar.gz:tar -zcvf project.tar.gz project/- 压缩多个文件为
.tar.xz:tar -Jcvf files.tar.xz file1.txt dir1/- 压缩时排除文件:
tar -zcvf project.tar.gz --exclude="*.tmp" project/(组合--exclude参数)
2. 解压+解归档(解压 .tar.gz/.tar.bz2/.tar.xz)
| 压缩格式 | 解压命令 | 解压到指定目录示例 |
|---|---|---|
.tar.gz/.tgz |
tar -zxvf project.tar.gz |
tar -zxvf project.tar.gz -C /opt/ |
.tar.bz2 |
tar -jxvf data.tar.bz2 |
tar -jxvf data.tar.bz2 -C /tmp/ |
.tar.xz |
tar -Jxvf backup.tar.xz |
tar -Jxvf backup.tar.xz -C /home/ |
快捷技巧:
若不确定压缩格式,tar新版本可自动识别,无需加-z/-j/-J,直接用:
tar -xvf 任意.tar.*(如tar -xvf backup.tar.xz等价于tar -Jxvf backup.tar.xz)
五、分类 4:tar 进阶操作(备份/恢复/特殊需求)
1. 备份系统目录(保留完整权限)
备份 /etc(系统配置目录)、/home(用户目录)等时,需保留文件权限、所有者,建议加 -p 参数:
# 备份 /etc 目录到 /backup/etc_backup.tar.gz(保留权限)
sudo tar -zcvpf /backup/etc_backup.tar.gz /etc/
加
sudo是为了避免因权限不足导致部分文件无法备份。
2. 压缩大文件(分卷压缩)
tar 本身不支持分卷,需配合 split 命令将大压缩包拆分为小卷(适合传输/存储):
# 步骤1:生成完整压缩包
tar -zcvf large_backup.tar.gz /home/user/# 步骤2:拆分为 500MB 每卷(卷名:large_backup.tar.gz.aa、ab...)
split -b 500m large_backup.tar.gz large_backup.tar.gz.# 步骤3:分卷恢复(先合并,再解压)
cat large_backup.tar.gz.* > large_backup.tar.gz # 合并所有分卷
tar -zxvf large_backup.tar.gz # 正常解压
3. 增量备份(仅备份修改/新增文件)
结合 --newer 或 --newer-mtime 参数,仅打包指定时间后修改的文件:
# 仅打包 2025-10-01 之后修改的文件(增量备份)
tar -zcvf increment_backup.tar.gz --newer-mtime="2025-10-01" /home/user/docs/# 仅打包比 reference.txt 更新的文件(以文件修改时间为基准)
tar -zcvf increment_backup.tar.gz --newer reference.txt /home/user/docs/
4. 压缩时忽略隐藏文件(如 .git、.DS_Store)
# 排除所有以 . 开头的隐藏文件/目录
tar -zcvf project.tar.gz --exclude=".*" --exclude="*/.*" project/
5. 查看压缩包内容(不解压)
# 查看 .tar.gz 包内容(加 -z 对应压缩格式)
tar -ztvf project.tar.gz# 查看 .tar.xz 包内容
tar -Jtvf backup.tar.xz
六、tar 常见问题排查
-
**“tar: Removing leading
/' from member names” 警告**: 打包绝对路径(如/home/user)时,tar会自动去掉路径开头的/,避免解压时覆盖系统文件。若需保留绝对路径,加-P` 参数(慎用,可能导致解压覆盖风险):sudo tar -zcvf backup.tar.gz -P /home/user/ # 保留绝对路径 -
解压时权限不足:
目标目录无写入权限,需先创建目录并授权,或用sudo解压(仅备份/系统文件时使用):mkdir -p /tmp/unpack && chmod 777 /tmp/unpack tar -zxvf project.tar.gz -C /tmp/unpack/ -
压缩包损坏:
用tar -tvf 压缩包名检查完整性,若提示“错误的归档”,重新下载/传输;若部分损坏,尝试忽略错误解压:tar -zxvf broken.tar.gz --ignore-command-error # 忽略错误继续解压 -
符号链接打包后无法使用:
默认打包链接本身,解压后链接可能失效。若需打包链接指向的原始文件,加-h参数:tar -zcvfh link_backup.tar.gz /usr/local/bin/my_link
七、tar 核心命令总结(快速参考)
| 操作场景 | 命令示例 |
|---|---|
| 打包目录为 .tar | tar -cvf dir.tar dir1/ |
| 打包+压缩为 .tar.gz | tar -zcvf dir.tar.gz dir1/ |
| 打包+高压缩为 .tar.xz | tar -Jcvf dir.tar.xz dir1/ |
| 解压 .tar 到当前目录 | tar -xvf dir.tar |
| 解压 .tar.gz 到指定目录 | tar -zxvf dir.tar.gz -C /opt/ |
| 查看压缩包内容 | tar -ztvf dir.tar.gz |
| 增量备份(指定时间后修改的文件) | tar -zcvf inc.tar.gz --newer-mtime="2025-10-01" /home/ |
| 打包时排除文件 | tar -zcvf project.tar.gz --exclude="*.log" project/ |
核心结论
tar 的核心价值是 归档+保留 Linux 文件属性,配合 gzip/xz 后兼顾压缩需求:
- 日常 Linux 内部备份、目录传输 → 优先用
tar -zcvf(.tar.gz,平衡速度和压缩率); - 大文件存储、追求高压缩率 → 用
tar -Jcvf(.tar.xz); - 仅需整合文件(不压缩) → 用
tar -cvf(.tar); - 跨平台传输 → 不推荐
tar系列,优先用zip(Windows/Mac 原生支持)。
记住 c(创建)、x(提取)、f(文件名)、z(gzip)四个核心参数,即可覆盖 90% 的 tar 使用场景!
2)gzip 单个文件压缩/解压
gzip 是 Linux 中专门用于 单个文件压缩/解压 的工具(默认不支持目录压缩,也不归档),核心特点是:压缩速度快、占用资源少,生成 .gz 格式压缩包,默认会替换原文件(可通过参数保留)。以下按 压缩 和 解压 分类详细说明,含常用参数、示例和注意事项:
一、gzip 核心特性
- 仅支持 单个文件(不支持目录,若需压缩目录,需先
tar归档为.tar,再用gzip压缩成.tar.gz); - 默认行为:压缩后删除原文件,解压后删除
.gz压缩包; - 压缩率中等(低于
bzip2/xz),但速度最快,适合日常小文件/中等文件压缩。
| 操作类型 | 常用场景 | 命令示例 |
|---|---|---|
| 压缩 | 单个文件、保留原文件 | gzip -k 文件名 |
| 压缩 | 单个文件、指定压缩级别 | gzip -9 -k 文件名 |
| 解压 | 单个 .gz 文件、保留压缩包 | gunzip -k 文件名.gz |
| 解压 | 批量 .gz 文件 | gunzip *.gz |
| 目录压缩 | 归档+压缩(目录) | tar -zcvf 包名.tar.gz 目录 |
| 目录解压 | 解压+解归档(.tar.gz) | tar -zxvf 包名.tar.gz |
二、压缩(生成 .gz 文件)
1. 基础语法
gzip [参数] 要压缩的文件
2. 常用参数(压缩时)
| 参数 | 作用 |
|---|---|
| 无参数 | 基础压缩:生成 文件名.gz,删除原文件 |
-c |
保留原文件,将压缩结果输出到终端(需配合重定向保存) |
| -k | 直接保留原文件(推荐,比 -c 更简洁,部分系统支持) |
-1~-9 |
压缩级别(1=最快/压缩率最低,9=最慢/压缩率最高,默认 -6) |
-v |
显示压缩进度(显示原文件大小、压缩后大小、压缩比) |
3. 实用压缩示例
(1)基础压缩(默认删除原文件)
# 压缩 file.txt,生成 file.txt.gz,原 file.txt 被删除
gzip file.txt
(2)压缩并保留原文件(推荐)
两种方式,优先用 -k(更简洁,Linux 主流发行版均支持):
# 方式1:-k 参数(直接保留原文件)
gzip -k file.txt # 生成 file.txt.gz,原 file.txt 保留# 方式2:-c + 重定向(兼容所有系统,适合老版本 gzip)
gzip -c file.txt > file.txt.gz # 压缩结果写入 file.txt.gz,原文件保留
(3)指定压缩级别(平衡速度和压缩率)
# 快速压缩(优先速度,适合大文件)
gzip -1 -k large.log # -1=最快,生成 large.log.gz,保留原文件# 高压缩率(优先体积,适合小文件)
gzip -9 -k data.csv # -9=最高压缩率,生成 data.csv.gz,保留原文件
(4)显示压缩进度(-v 参数)
# 压缩时显示详细信息(大小、压缩比)
gzip -v -k file.txt
# 输出示例:file.txt: 67.8% -- replaced with file.txt.gz(压缩比67.8%)
(5)批量压缩多个文件
# 压缩当前目录下所有 .txt 文件,每个文件生成独立 .gz(原文件默认删除)
gzip *.txt# 批量压缩并保留原文件
gzip -k *.txt # 生成 a.txt.gz、b.txt.gz...,原 a.txt、b.txt 均保留
三、解压(解压 .gz 文件)
1. 基础语法
gzip -d [参数] 要解压的.gz文件
# 或等价命令(更简洁)
gunzip [参数] 要解压的.gz文件
说明:
gunzip是gzip -d的别名,功能完全一致,可互换使用。
2. 常用参数(解压时)
| 参数 | 作用 |
|---|---|
| 无参数 | 基础解压:生成原文件,删除 .gz 压缩包 |
-k |
保留 .gz 压缩包(不解压后删除) |
-v |
显示解压进度(原文件大小、解压后大小) |
-c |
解压结果输出到终端(需配合重定向,不生成文件) |
3. 实用解压示例
(1)基础解压(默认删除压缩包)
# 方式1:gzip -d
gzip -d file.txt.gz # 生成 file.txt,删除 file.txt.gz# 方式2:gunzip(更简洁)
gunzip file.txt.gz # 效果同上
(2)解压并保留压缩包(-k 参数)
# 解压后保留 file.txt.gz,同时生成 file.txt
gzip -k -d file.txt.gz
# 或用 gunzip
gunzip -k file.txt.gz
(3)显示解压进度(-v 参数)
gunzip -v file.txt.gz
# 输出示例:file.txt.gz: 67.8% -- replaced with file.txt(解压完成提示)
(4)批量解压多个 .gz 文件
# 解压当前目录下所有 .gz 文件,默认删除压缩包
gunzip *.gz# 批量解压并保留所有 .gz 压缩包
gunzip -k *.gz
(5)解压到终端(不生成文件,适合管道处理)
# 解压结果直接输出到终端(不生成原文件),可配合 grep/less 等工具
gzip -c -d log.txt.gz | grep "error" # 解压后筛选含 "error" 的行
四、gzip 与 tar 结合(压缩目录的正确方式)
gzip 本身不支持目录压缩,若需压缩目录,必须先通过 tar 归档为 .tar 包,再用 gzip 压缩(最终生成 .tar.gz,即日常最常用的格式),两步可合并为一条命令:
1. 压缩目录(归档+压缩)
# 格式:tar -zcvf 目标包名.tar.gz 要压缩的目录
tar -zcvf dir.tar.gz /home/user/docs/
# 说明:
# -z:调用 gzip 压缩
# -c:创建归档包
# -v:显示进度
# -f:指定包名(必须在最后)
2. 解压 .tar.gz 目录包(解压+解归档)
# 格式:tar -zxvf 压缩包名.tar.gz
tar -zxvf dir.tar.gz # 解压到当前目录
tar -zxvf dir.tar.gz -C /opt/ # 解压到指定目录 /opt
五、gzip 常见问题
-
无法压缩目录:gzip 仅支持单个文件,压缩目录需先
tar -cf 包名.tar 目录归档,再gzip 包名.tar生成.tar.gz(或直接用tar -zcvf一步完成); -
原文件被删除:默认行为,压缩时加
-k、解压时加-k可保留原文件; -
解压后文件乱码:gzip 本身不处理文件名编码,若压缩包来自 Windows,需先通过
convmv转换文件名编码(需安装convmv):convmv -f GBK -t UTF-8 --notest 乱码文件名.gz # 转换文件名编码后再解压 -
查看 .gz 文件内容(不解压):用
zcat或gzip -c -d:zcat file.txt.gz # 直接查看解压后的内容 gzip -c -d file.txt.gz | less # 分页查看
3)zip 跨平台兼容性极强
zip 是 Linux 中跨平台兼容性极强的压缩工具(支持 Linux/Windows/Mac 互通),核心特点是:支持压缩文件和目录(需加递归参数)、可设置密码、操作简单,适合小文件传输或跨平台分享(默认不保留 Linux 文件权限,若需权限保留建议用 tar 系列格式)。
以下按 压缩、解压、进阶操作 分类说明,含详细参数和实用示例:
| 操作场景 | 命令示例 |
|---|---|
| 压缩文件(多个) | zip docs.zip a.pdf b.txt |
| 压缩目录(含子目录) | zip -rv project.zip /home/user/project/ |
| 压缩并设置密码(交互式) | zip -re secret.zip private/ |
| 解压到当前目录 | unzip docs.zip |
| 解压到指定目录 | unzip docs.zip -d /home/user/downloads/ |
| 查看压缩包内容 | unzip -l docs.zip |
| 解决中文乱码 | unzip -O GBK 中文压缩包.zip |
一、zip 基础准备(安装)
部分 Linux 发行版(如 CentOS、部分 Ubuntu 精简版)默认未安装 zip 和配套解压工具 unzip,需先安装:
# Ubuntu/Debian 系列
sudo apt update && sudo apt install zip unzip -y# CentOS/RHEL 系列
sudo yum install zip unzip -y# 验证安装(显示版本即成功)
zip --version
unzip --version
二、分类 1:zip 压缩操作(生成 .zip 文件)
1. 核心语法
zip [参数] 目标压缩包名.zip 要压缩的文件/目录
常用
目录必须加 -rv
2. 常用压缩参数
| 参数 | 作用 |
|---|---|
| -r | 递归压缩(必须加!压缩目录时包含子目录和文件) |
| -k | 保留文件原始属性(如权限、修改时间,仅 Linux 有效) |
-P 密码 |
给压缩包设置密码(明文输入,慎用!适合临时简单加密) |
-e |
交互式设置密码(压缩时手动输入密码,比 -P 安全) |
| -v | 显示压缩详细进度(文件列表、大小、压缩比) |
-q |
静默压缩(不显示任何输出,后台执行) |
-m |
压缩后删除原文件(“移动”到压缩包,类似剪切) |
-u |
更新压缩包(仅添加新增/修改的文件,不重复压缩旧文件) |
3. 实用压缩示例
(1)压缩单个/多个文件(无需 -r)
# 压缩单个文件
zip photo.zip img.jpg# 压缩多个文件(空格分隔)
zip docs.zip report.pdf notes.txt data.csv
(2)压缩目录(必须加 -r 递归)
# 基础:压缩目录(含子目录)
zip -r project.zip /home/user/project/# 压缩目录并显示进度(-v)
zip -rv project.zip /home/user/project/# 压缩目录并保留文件权限(-k,Linux 环境推荐)
zip -rk project.zip /home/user/project/
(3)压缩并设置密码(两种方式)
# 方式1:交互式密码(推荐,密码不显示在命令行)
zip -re secret.zip private/ # 执行后提示输入密码,二次确认# 方式2:明文密码(-P,慎用!密码会被历史命令记录)
zip -rP 123456 secret.zip private/ # 密码直接写在命令行
(4)压缩后删除原文件(-m,剪切式压缩)
# 压缩文件后删除原文件(适合释放空间)
zip -m docs.zip report.pdf notes.txt# 压缩目录后删除原目录
zip -rm project.zip /home/user/old_project/
(5)更新压缩包(-u,添加新增文件)
# 原压缩包 docs.zip 已存在,仅添加新修改的 file3.txt
zip -u docs.zip file3.txt# 更新目录压缩包(新增/修改的文件会加入,旧文件不变)
zip -ru project.zip /home/user/project/
(6)排除指定文件/目录(压缩时不包含)
# 压缩目录时,排除 .log 日志文件和 temp 临时目录
zip -r project.zip /home/user/project/ --exclude "*.log" "*/temp/*"
三、分类 2:unzip 解压操作(解压 .zip 文件)
1. 核心语法
unzip [参数] 要解压的.zip文件
2. 常用解压参数
| 参数 | 作用 |
|---|---|
-d 目录 |
解压到指定目录(目录不存在会自动创建) |
-l |
查看压缩包内容(文件名、大小、日期,不解压) |
-v |
详细查看压缩包信息(含压缩比、权限,不解压) |
-q |
静默解压(不显示输出) |
-o |
覆盖已有文件(无需确认,直接替换) |
-n |
不覆盖已有文件(遇到重复文件跳过) |
-P 密码 |
解压带密码的压缩包(明文密码,慎用;交互式输入更安全) |
-j |
仅解压文件(忽略目录结构,所有文件解压到同一目录) |
3. 实用解压示例
(1)基础解压(解压到当前目录)
unzip docs.zip # 遇到重复文件会提示是否覆盖
(2)解压到指定目录(-d,最常用)
# 解压到 /home/user/downloads 目录(目录自动创建)
unzip docs.zip -d /home/user/downloads/# 解压到临时目录
unzip project.zip -d /tmp/
(3)查看压缩包内容(不解压)
# 简单查看文件列表
unzip -l docs.zip# 详细查看(含压缩比、文件权限)
unzip -v project.zip
(4)解压带密码的压缩包
# 方式1:交互式输入密码(推荐,密码不显示)
unzip secret.zip # 执行后提示输入密码# 方式2:明文指定密码(-P,慎用)
unzip -P 123456 secret.zip
(5)覆盖/不覆盖已有文件
# 强制覆盖已有文件(无需确认)
unzip -o docs.zip -d /home/user/downloads/# 不覆盖已有文件(重复文件跳过)
unzip -n docs.zip -d /home/user/downloads/
(6)忽略目录结构,仅解压文件
# 压缩包内的所有文件直接解压到当前目录(无层级)
unzip -j project.zip
(7)解压部分文件(只取需要的文件)
# 仅解压压缩包中的 report.pdf 和 data.csv
unzip docs.zip report.pdf data.csv# 仅解压压缩包中某个目录下的文件
unzip project.zip "project/src/*" -d /home/user/src/
四、进阶操作:解决常见问题
1. 中文文件名乱码(Windows 生成的 zip 常见)
Linux 默认用 UTF-8 编码,Windows 生成的 zip 可能用 GBK 编码,导致解压后文件名乱码,解决:
# 方式1:解压时指定编码(-O 大写字母 O)
unzip -O GBK 中文压缩包.zip # 适合 GBK 编码的 zip# 方式2:若 -O 无效,安装 unar(更强大的解压工具)
sudo apt install unar # 安装
unar 中文压缩包.zip # 自动识别编码,解决乱码
2. 修复损坏的 zip 压缩包
# 尝试修复损坏的 zip(生成修复后的压缩包)
zip -F broken.zip --out fixed.zip# 深度修复(损坏严重时用)
zip -FF broken.zip --out fixed.zip
3. 分卷压缩(大文件拆分多个小 zip)
适合大文件传输(如拆分 100MB 每卷):
# 拆分压缩包为 100MB 每卷(卷名:large.zip.001、large.zip.002...)
zip -r -s 100m large.zip /home/user/big_file/# 分卷解压(先合并分卷,再解压)
cat large.zip.* > combined.zip # 合并所有分卷为完整 zip
unzip combined.zip # 正常解压
4. 压缩时排除隐藏文件(如 .git、.DS_Store)
# 排除所有隐藏文件(以 . 开头)
zip -r project.zip /home/user/project/ --exclude ".*" "*/.*"
五、zip 与 tar.gz 对比(选择建议)
| 特性 | zip | tar.gz(tar+gzip) |
|---|---|---|
| 跨平台兼容性 | 极强(Windows/Mac 原生支持) | 一般(Windows 需工具如 7-Zip) |
| 目录压缩 | 需加 -r 参数 |
原生支持(-zcvf 一步完成) |
| Linux 文件权限保留 | 需加 -k 参数(不完全) |
原生保留(适合备份系统文件) |
| 压缩速度/压缩率 | 中等 | 速度快、压缩率中等(比 zip 略优) |
| 密码加密 | 支持(-e/-P) |
不原生支持(需配合 openssl) |
选择建议:
- 跨平台分享、小文件传输 → 用 zip;
- Linux 内部备份、保留权限、目录压缩 → 用 tar.gz;
- 大文件高压缩率需求 → 用 tar.xz(
tar -Jcvf)。
记住 -r(压缩目录)、-d(指定解压目录)、-e(密码加密)三个核心参数,即可覆盖 90% 的 zip 使用场景!