做什么

zip 是Windows / Mac / Linux 三大平台都认的压缩格式——发给非 Linux 用户首选。

sudo apt install zip unzip

zip:打包

zip archive.zip file.txt                  # 单文件
zip archive.zip file1.txt file2.txt       # 多文件
zip -r archive.zip folder/                # ★ 目录必须 -r
zip -r archive.zip folder/ -x "*.log"     # 排除某模式
zip -j archive.zip path/to/file.txt       # 不保留路径(仅文件名)
zip -P "password" -r secret.zip folder/   # 加密(弱安全,仅图防瞎看)
zip -9 archive.zip *                       # 最高压缩
zip -0 archive.zip *                       # 不压缩(仅打包)

unzip:解压

unzip archive.zip                  # 解压到当前目录
unzip archive.zip -d /tmp/         # 解压到指定目录
unzip -l archive.zip               # 仅列出内容(不解压)
unzip -v archive.zip               # 详细列表
unzip -p archive.zip file.txt      # 解压某文件到 stdout
unzip -o archive.zip               # 覆盖已存在文件(不问)
unzip -n archive.zip               # 不覆盖

实战

给 Windows 同事打包代码

zip -r project.zip src/ docs/ -x "*.git/*" -x "node_modules/*"

解压一组 zip

for f in *.zip; do
    unzip "$f" -d "${f%.zip}/"
done

加密压缩(一定程度的保密)

zip -e archive.zip files/         # 提示输密码
zip -P 'mypass' archive.zip files/   # 命令行传密码(不推荐——会进 shell history)

⚠ zip 加密安全性弱——只能挡住普通好奇心,专业破解快。敏感数据用 gpg

tar czf - data/ | gpg -c > data.tar.gz.gpg
gpg -d data.tar.gz.gpg | tar xzf -

中文文件名乱码

Windows 创建的 zip 在 Linux 解压常乱码——加 -O CP936

unzip -O CP936 windows-made.zip

  • 默认 zip -r 保留路径结构——如果要扁平打包用 -j
  • macOS 默认的 zip 会包含 .DS_Store__MACOSX/——清理:zip -r ... -x "__MACOSX" "*.DS_Store"
  • 大文件 zip 慢于 tar+gzip——但 zip 是跨平台兼容的代价