Linux zip 命令完全指南
简介
zip 是 Linux 系统中一个功能强大的压缩和归档实用工具,它允许用户将文件和目录压缩成一个紧凑的 .zip 存档文件。zip 命令广泛应用于文件管理、备份和数据传输场景,常用于减小文件大小、将多个文件合并到一个存档中以及为了安全而加密存档。
zip 程序将单个或多个压缩文件放入一个 zip 存档中,同时保存文件的名称、路径、修改时间、保护信息和校验信息等元数据。它与 PKZIP(Phil Katz 的 ZIP 工具)兼容,并且可以在 Unix、VMS、MSDOS、OS/2、Windows 等多个操作系统上运行。
安装 zip
大多数 Linux 发行版都预装了 zip 和 unzip 工具。如果系统没有安装,可以使用包管理器进行安装:
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.txt 的 archive.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.z01、archive.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
最佳实践
-
压缩目录时始终使用
-r:递归选项是压缩目录的必备参数。 -
合理选择压缩级别:日常使用默认级别即可;对重要备份可使用
-9获得最大压缩;对临时打包可使用-0或低级别以节省时间。 -
敏感数据务必加密:使用
-e选项对包含敏感信息的存档进行加密。 -
大型文件使用分卷压缩:便于通过邮件附件、U盘等方式传输。
-
压缩后验证完整性:使用
-T选项检查存档是否完好。 -
注意跨平台兼容性:在 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 命令使用,可以完整地完成从压缩到解压的整个工作流。