zip 命令 #
zip
命令用于创建和管理 ZIP 格式的压缩文件。ZIP 是一种广泛使用的压缩和归档格式,在 Windows、macOS 和 Linux 等多种操作系统上都有良好的支持。
语法 #
zip [选项] [压缩文件 [文件...]]
常用选项 #
选项 | 描述 |
---|---|
-r |
递归处理目录 |
-u |
更新:仅添加新文件或更新的文件 |
-m |
压缩后删除原始文件 |
-j |
不记录目录名(junk paths) |
-0 |
仅存储,不压缩 |
-1 到 -9 |
压缩级别(1 最快,9 最好) |
-e |
加密 ZIP 文件 |
-P 密码 |
使用指定的密码加密(不安全,密码会显示在进程列表中) |
-v |
显示详细信息 |
-q |
安静模式,不显示任何信息 |
-d |
从 ZIP 文件中删除条目 |
-T |
测试 ZIP 文件的完整性 |
-x 文件 |
排除指定的文件 |
-i 文件 |
仅包含指定的文件 |
-@ |
从标准输入读取文件名 |
-F |
修复损坏的 ZIP 文件 |
-y |
保存符号链接,而不是链接指向的文件 |
-n 后缀 |
不压缩指定后缀的文件 |
常见用法 #
1. 创建 ZIP 文件 #
zip archive.zip file1.txt file2.txt
2. 递归压缩目录 #
zip -r archive.zip directory/
3. 创建加密的 ZIP 文件 #
zip -e archive.zip file1.txt file2.txt
系统会提示输入密码。
4. 使用指定密码创建加密 ZIP 文件(不安全) #
zip -P password archive.zip file1.txt file2.txt
注意:这种方式不安全,因为密码会显示在进程列表中。
5. 更新 ZIP 文件 #
zip -u archive.zip newfile.txt
这只会添加新文件或更新的文件。
6. 压缩后删除原始文件 #
zip -m archive.zip file1.txt file2.txt
7. 不记录目录结构 #
zip -j archive.zip directory/file1.txt directory/subdir/file2.txt
这会将所有文件添加到 ZIP 的根目录,忽略原始目录结构。
8. 设置压缩级别 #
# 最快压缩
zip -1 archive.zip file.txt
# 最佳压缩
zip -9 archive.zip file.txt
9. 仅存储文件,不压缩 #
zip -0 archive.zip file.txt
10. 显示详细信息 #
zip -v archive.zip file.txt
11. 从 ZIP 文件中删除条目 #
zip -d archive.zip file.txt
12. 测试 ZIP 文件的完整性 #
zip -T archive.zip
13. 排除特定文件 #
zip -r archive.zip directory/ -x "*.git*" "*.DS_Store"
14. 从标准输入读取文件名 #
find . -name "*.txt" | zip -@ archive.zip
15. 保存符号链接 #
zip -y archive.zip symlink
16. 不压缩特定类型的文件 #
zip -r archive.zip directory/ -n .jpg:.png:.mp3
这会存储而不压缩.jpg、.png 和.mp3 文件,因为它们已经是压缩格式。
与 unzip 结合使用 #
1. 解压 ZIP 文件 #
unzip archive.zip
2. 列出 ZIP 文件内容 #
unzip -l archive.zip
3. 解压到特定目录 #
unzip archive.zip -d /path/to/directory/
4. 解压加密的 ZIP 文件 #
unzip -P password archive.zip
或者不指定密码,系统会提示输入:
unzip archive.zip
实用示例 #
1. 备份目录 #
zip -r backup-$(date +%Y%m%d).zip important_directory/
2. 创建自解压 ZIP 文件(需要 unzip) #
echo '#!/bin/sh' > self_extract.sh
echo 'SKIP=`awk "/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }" $0`' >> self_extract.sh
echo 'tail -n+$SKIP $0 | unzip -' >> self_extract.sh
echo 'exit 0' >> self_extract.sh
echo '__ARCHIVE_BELOW__' >> self_extract.sh
zip -r - files_to_include/ >> self_extract.sh
chmod +x self_extract.sh
3. 分割大型 ZIP 文件 #
zip -r -s 100m large_archive.zip large_directory/
这会创建大小为 100MB 的分卷 ZIP 文件。
4. 合并分割的 ZIP 文件 #
zip -F large_archive.zip --out complete.zip
5. 比较两个 ZIP 文件的内容 #
diff <(unzip -l archive1.zip | sort) <(unzip -l archive2.zip | sort)
提示 #
- 在 Linux 上,通常需要安装
zip
和unzip
包,因为它们可能不是默认安装的 - ZIP 格式在跨平台文件共享时特别有用,因为 Windows、macOS 和 Linux 都支持它
- 使用
-e
选项进行加密比使用-P
选项更安全 - ZIP 的加密功能相对较弱,对于敏感数据,考虑使用其他加密方法
- 对于大型文件或需要更高压缩率的情况,考虑使用
tar
与gzip
、bzip2
或xz
结合 - 使用
-9
可以获得最佳压缩率,但会增加压缩时间 - 使用
-0
对已经压缩的文件(如 JPEG、MP3 等)可以节省处理时间 - 在脚本中使用
zip
时,可以使用-q
选项抑制输出 - 使用
-u
选项可以实现增量备份 - 使用
-y
选项可以保留符号链接,这在备份时可能很重要