跳转到内容

zip & unzip

zip 和 unzip 是 Linux 系统中用于创建和解压 .zip 格式压缩文件的工具,使用 Deflate 算法(默认),支持多文件压缩、保留目录结构、加密压缩,并且跨平台兼容(Windows、macOS、Linux)。

zip(压缩)

Terminal window
zip [选项] 压缩包名称 文件/目录...
  • zip 只用于压缩,解压通常使用 unzip 命令
  • zip 可以一次压缩多个文件或目录,如果需要压缩整个目录,需要加 -r(递归)选项
  • zip 默认是创建或更新压缩包,如果指定的压缩包已经存在,它会自动把指定文件添加或更新到压缩包中

unzip(解压)

Terminal window
unzip [选项] 压缩包名称 [文件...]
  • 不指定文件则解压压缩包中所有文件
  • 指定文件则只解压压缩包中的部分文件

1. 基础压缩选项

选项 说明
-r 递归压缩目录(包括子目录)
-0 至 -9 设置压缩级别(-0 无压缩,-9 最高压缩率,默认 -6)
-q 安静模式(不显示压缩过程的详细信息)
-v 详细模式(显示压缩进度、文件信息、压缩率等)

2. 高级功能选项

选项 说明
-u <files> 更新已有文件或添加新文件,但不影响压缩包里其他文件
-d <files> 从压缩包中删除指定文件
-e 加密压缩包(会提示输入密码,解压时需输入密码)
-j 仅压缩文件内容,不保留目录结构(所有文件直接放在压缩包根目录)

1. 基础解压选项

选项 说明
-d <dir> 指定解压目标目录(默认解压到当前目录)
-l 仅列出压缩包中的文件列表,不解压
-t 测试压缩包的完整性(检查是否有损坏或错误)
-v 详细模式(显示解压进度、文件权限、压缩率等信息)
-q 安静模式(不显示解压过程的详细信息)

2. 高级操作选项

选项 说明
-o 覆盖模式(解压时直接覆盖已存在的文件,不提示)
-n 不覆盖模式(不解压已存在的文件,避免覆盖)
-j 解压时忽略原目录结构,将所有文件提取到同一目录
-x <files> 排除指定文件(解压时不提取该文件)

1. 基础压缩操作

Terminal window
# 压缩单个文件(file.txt -> archive.zip)
zip archive.zip file.txt
# 压缩多个文件(file1.txt、file2.txt 加入 archive.zip)
zip archive.zip file1.txt file2.txt
# 递归压缩目录(将 dir1 及其子内容加入 dir.zip)
zip -r dir.zip dir1/
# 最高压缩率压缩(-9 级别,压缩率高但速度慢)
zip -9 -r backup.zip /home/user/docs

2. 压缩包更新与维护

Terminal window
# 向 existing.zip 中添加新文件 newfile.txt
zip existing.zip newfile.txt
# 更新压缩包(仅替换比压缩包中更新的文件)
zip -u existing.zip modified_file.txt
# 从 archive.zip 中删除 unwanted.txt
zip -d archive.zip unwanted.txt

3. 加密压缩

Terminal window
# 创建加密压缩包(会提示输入密码)
zip -e secret.zip sensitive_data/

4. 不保留目录结构

假设目录结构如下:

myfolder/
├── file1.txt
└── subdir/
└── file2.txt

默认压缩,保留目录结构:

Terminal window
zip -r archive.zip myfolder/

压缩包内容:

myfolder/file1.txt
myfolder/subdir/file2.txt

使用 -j 去掉路径:

Terminal window
zip -j archive.zip myfolder/*

压缩包内容:

file1.txt
file2.txt

5. 查看压缩包内容

Terminal window
# 查看压缩包内容(无需解压)
zipinfo archive.zip # 或使用 unzip -l archive.zip

1. 基础解压操作

Terminal window
# 解压 archive.zip 到当前目录(会提示是否覆盖已有文件)
unzip archive.zip
# 解压到指定目录 /tmp/extract
unzip archive.zip -d /tmp/extract
# 安静模式解压(不输出过程信息)
unzip -q large.zip

2. 查看与测试压缩包

Terminal window
# 查看压缩包内的文件列表(包含大小、修改时间等)
unzip -l archive.zip
# 详细查看压缩包信息(包括压缩率、权限等)
unzip -v archive.zip
# 测试压缩包是否损坏(无输出表示正常,有错误会提示)
unzip -t archive.zip

3. 选择性解压与覆盖控制

Terminal window
# 只解压压缩包中的 file1.txt 和 dir/subfile.txt
unzip archive.zip file1.txt dir/subfile.txt
# 解压时排除 temp.log 文件(不提取该文件)
unzip archive.zip -x temp.log
# 强制覆盖已存在的文件(不提示)
unzip -o update.zip
# 不解压已存在的文件(保留现有文件)
unzip -n backup.zip

4. 处理特殊压缩包

Terminal window
# 解压加密压缩包(会提示输入密码)
unzip secret.zip
# 忽略目录结构,将所有文件解压到当前目录
unzip -j structured.zip