Linux zip 命令完全指南

Linux zip 命令完全指南

简介

zip 是 Linux 系统中一个功能强大的压缩和归档实用工具,它允许用户将文件和目录压缩成一个紧凑的 .zip 存档文件。zip 命令广泛应用于文件管理、备份和数据传输场景,常用于减小文件大小、将多个文件合并到一个存档中以及为了安全而加密存档。

zip 程序将单个或多个压缩文件放入一个 zip 存档中,同时保存文件的名称、路径、修改时间、保护信息和校验信息等元数据。它与 PKZIP(Phil Katz 的 ZIP 工具)兼容,并且可以在 Unix、VMS、MSDOS、OS/2、Windows 等多个操作系统上运行。

安装 zip

大多数 Linux 发行版都预装了 zipunzip 工具。如果系统没有安装,可以使用包管理器进行安装:

Ubuntu/Debian:

sudo apt update
sudo apt install zip unzip

CentOS/RHEL:

sudo yum install zip unzip

基本语法

zip 命令的基本语法格式为:

zip [选项] 存档文件名.zip 文件或目录

基础用法

1. 压缩单个文件

压缩单个文件是最基本的用法:

zip archive.zip file.txt

该命令会创建包含 file.txtarchive.zip 文件。

2. 压缩多个文件

将多个文件压缩到同一个存档中:

zip archive.zip file1.txt file2.txt file3.txt

3. 压缩目录(递归压缩)

压缩目录时必须使用 -r 选项进行递归处理:

zip -r archive.zip mydir/

-r 选项会将指定目录下的所有文件和子目录一并处理。

4. 压缩多个目录

zip -r archive.zip dir1/ dir2/ dir3/

常用参数详解

参数 说明 示例
-r 递归处理,压缩目录及其所有子目录和文件 zip -r archive.zip /path/to/dir
-q 安静模式,不显示指令执行过程 zip -q archive.zip file.txt
-v 详细模式,显示压缩过程的详细信息 zip -v archive.zip file.txt
-e 加密存档,压缩时提示输入密码 zip -e secure.zip sensitive.txt
-P 使用密码选项,直接在命令行指定密码 zip -P mypassword secure.zip file.txt
-d 从压缩文件内删除指定文件 zip -d archive.zip file.txt
-u 更新压缩文件,只替换较新的文件 zip -u archive.zip newfile.txt
-m 压缩后删除原始文件(移动文件到压缩包) zip -m archive.zip file.txt
-x 压缩时排除符合条件的文件 zip archive.zip dir/ -x "dir/exclude/*"
-T 检查压缩文件的完整性 zip -T archive.zip
-l 列出压缩文件内容(需配合 unzip unzip -l archive.zip

高级用法

1. 设置压缩级别

zip 支持从 0 到 9 的压缩级别,数值越大压缩率越高,但耗时也越长:

级别 说明
-0 无压缩(仅存储,速度最快)
-1-3 快速压缩,压缩比较低
-4-6 平衡压缩(默认级别约为 -6
-7-9 最大压缩(速度最慢)
# 最大压缩
zip -9 -r high_compression.zip mydir/

# 无压缩(仅打包)
zip -0 -r no_compression.zip mydir/

2. 加密压缩

使用 -e 选项创建加密的 zip 存档,命令会提示输入两次密码:

zip -e secure.zip confidential.txt

使用 -P 选项可以在命令行中直接指定密码(注意:这种方式可能会在 shell 历史中留下密码):

zip -r -P mypassword secure.zip secret_folder/

3. 排除特定文件

使用 -x 选项排除不需要压缩的文件:

# 排除特定文件
zip -r archive.zip mydir/ -x "mydir/exclude.txt"

# 排除所有 .log 文件
zip -r backup.zip mydir/ -x "*.log"

# 排除多个模式
zip -r backup.zip * -x "*.log" -x "temp/*"

4. 分卷压缩(分割大型存档)

使用 -s 选项将大型 zip 存档分割成指定大小的多个部分:

# 分割成每个 100MB 的分卷
zip -s 100m -r large_archive.zip mydir/

执行后会生成多个文件(如 archive.z01archive.z02……archive.zip),解压时需将所有分卷放在同一目录下,直接解压 .zip 文件即可自动合并。

5. 更新现有存档

使用 -u 选项更新已存在的 zip 存档,只添加新文件或替换较新的文件:

zip -u archive.zip newfile.txt

6. 从存档中删除文件

使用 -d 选项从压缩文件中删除指定文件:

zip -d archive.zip file_to_remove.txt

7. 添加文件到已有存档

使用 -g 选项将文件附加到已有的压缩文件之后:

zip -g existing_archive.zip newfile.txt

8. 检查存档完整性

使用 -T 选项检查压缩文件是否正确无误:

zip -T archive.zip

解压文件(unzip)

压缩的逆操作是使用 unzip 命令解压:

基本解压

unzip archive.zip

解压到指定目录

unzip archive.zip -d /path/to/directory/

查看压缩文件内容(不解压)

unzip -l archive.zip

解压时覆盖已存在文件

unzip -o archive.zip

最佳实践

  1. 压缩目录时始终使用 -r:递归选项是压缩目录的必备参数。

  2. 合理选择压缩级别:日常使用默认级别即可;对重要备份可使用 -9 获得最大压缩;对临时打包可使用 -0 或低级别以节省时间。

  3. 敏感数据务必加密:使用 -e 选项对包含敏感信息的存档进行加密。

  4. 大型文件使用分卷压缩:便于通过邮件附件、U盘等方式传输。

  5. 压缩后验证完整性:使用 -T 选项检查存档是否完好。

  6. 注意跨平台兼容性:在 Linux 上创建的 zip 存档可以在 Windows 和 macOS 上正常打开,这使 zip 成为一个通用的文件压缩工具。

常见问题

Zip64 扩展支持

当压缩文件超过 4GB、存档总大小超过 4GB,或存档中的文件条目超过约 64K 时,zip 会自动使用 Zip64 扩展。解压时需要使用支持 Zip64 的 unzip 6.0 或更高版本。

符号链接处理

使用 -y 选项可以直接保存符号链接本身,而非链接所指向的文件:

zip -r -y archive.zip symlink_dir/

总结

zip 是 Linux 系统中不可或缺的文件压缩工具。掌握它的基本用法和高级功能,可以大幅提升日常文件管理和数据备份的效率。无论是压缩单个文件、打包整个目录,还是创建加密或分卷存档,zip 都能提供简洁而强大的解决方案。配合 unzip 命令使用,可以完整地完成从压缩到解压的整个工作流。