第 4 章 · 06 `zip`/`unzip`:跨平台归档


第 4 章 · 06 zip/unzip:跨平台归档

本节摘要:zip 是 Windows 世界的「归档标准」——双击即解、系统原生支持、人人会用。在纯 Linux 环境里,tar.gz 更主流;但只要涉及「传给 Windows 用户」「收 Windows 发来的压缩包」,zip 就是最省心的选择。本节要讲清 zip 与 tar 的本质差别:zip 自带压缩(打包+压缩一体)、随机访问(能不解包直接看里面某个文件),但压缩率通常略逊于 tar+xz。理解这些取舍,你就知道何时该用 zip、何时该用 tar.gz。

内容来源:综合 zip/unzip 相关知识整理,套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. 用 zip 创建归档(打包+压缩一体),并用 -r 递归包含目录。
  2. 用 unzip 解压、-l 列出内容、-d 指定解压目录。
  3. 说清 zip 与 tar 的三大差别:自带压缩、随机访问、跨平台支持。
  4. 判断何时该用 zip(跨平台、Windows)何时用 tar.gz(纯 Linux、脚本、追求压缩率)。
  5. 处理 zip 的中文文件名乱码问题(-O 选项)。

一、设计动机:zip 与 tar 的设计哲学差异

tar 和 zip 解决同一个问题(把多文件合成一个),但设计哲学截然不同:

tar(顺序流):把文件顺序拼接成一个流,打包与压缩分离。优点是简单、灵活(可配合任意压缩器);缺点是只能顺序访问——想看 tar 包里第 100 个文件,得先把前 99 个读过去。

zip(随机访问):每个文件单独压缩后,加上一个「中央目录」索引放在末尾。优点是随机访问(能直接跳到某个文件不解压其他)、打包与压缩一体;缺点是压缩率略低(每个文件单独压,无法跨文件找冗余)、格式相对复杂。

这个设计差异决定了各自的适用场景:

特性 tar zip
压缩 打包与压缩分离(.tar.gz) 自带压缩(一体)
随机访问 不支持(必须顺序读) 支持(能单独提取某文件)
Windows 支持 需装 7-Zip 等工具 系统原生支持
Linux 主流 是 否(跨平台时用)
压缩率 高(配合 xz) 中(每文件单独压)
追加文件 麻烦(需重新打包) 方便(zip -u 直接追加)

二、高频组合与实战

创建 zip

zip archive.zip file1 file2 # 把几个文件压进 archive.zip zip -r archive.zip project/ # -r 递归, 包含目录(必备选项) zip -e secret.zip secret.txt # -e 加密码(会提示输入) zip -u archive.zip newfile.txt # -u 往现有 zip 追加/更新文件 ​

💡 技巧:压目录务必加 -r,否则只压了空目录壳,里面的文件全漏掉——这是 zip 最常见的坑。

解压

unzip archive.zip # 解压到当前目录 unzip archive.zip -d /opt/ # -d 指定解压目录 unzip -l archive.zip # -l 只列出内容, 不解压 unzip archive.zip file.txt # 只解压其中的 file.txt(随机访问!) ​

zip 的「随机访问」在这里体现得淋漓尽致——unzip archive.zip file.txt 直接提取单个文件,不用解开整个包。tar 做不到这点。

查看与校验

unzip -l archive.zip # 列出内容(文件名/大小/日期) unzip -t archive.zip # -t 测试完整性(校验 CRC), 下载后必做 ​

三、踩坑与排错

坑 1:压目录忘加 -r

zip proj.zip project/ # 错! 只压了空目录 zip -r proj.zip project/ # 对! 递归包含所有内容 ​

坑 2:中文文件名乱码

Windows 创建的 zip 用 GBK 编码文件名,Linux 默认 UTF-8,解压时中文会变乱码:

unzip -O GBK archive.zip # -O 指定原编码为 GBK unzip -O CP936 archive.zip # CP936 是 GBK 的另一名字 ​

反向:Linux 创建给 Windows 的 zip,中文也可能乱码。最稳妥是文件名用 ASCII,或双方约定编码。

坑 3:zip 压缩率不如 tar.xz

tar -cJf proj.tar.xz project/ # 压缩率最高 zip -r proj.zip project/ # 压缩率中等, 通常比 xz 大 20-30% ​

如果你只追求「压得小」,且不涉及 Windows,tar+xz 是更好的选择。zip 的优势在「跨平台 + 随机访问」,不在压缩率。

坑 4:大文件 zip 较慢

zip 的中央目录设计,在文件极多(几万)时会有性能问题。海量小文件归档,tar 更合适。

本节要点回顾

  1. zip 自带压缩、随机访问、Windows 原生支持;tar 打包与压缩分离、顺序访问、Linux 主流。
  2. 压目录必加 -r:zip -r archive.zip project/,否则只压空壳。
  3. zip 支持随机访问:unzip archive.zip 单文件 能直接提取,不必全解。
  4. 何时用 zip:传给 Windows 用户、收 Windows 包、需要随机访问。何时用 tar.gz:纯 Linux、脚本里、追求压缩率(配合 xz)。
  5. 中文文件名乱码:用 unzip -O GBK 指定原编码。
  6. zip 压缩率通常略逊 tar.xz,优势在跨平台与随机访问,不在「压得小」。

下一节讲生产环境的事实标准——rsync 的增量同步机制,它是备份与镜像的利器。


作者与出处
原作者: 灏天文库
来源:jaywcjlove
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 灏天文库 转发
评论区 (0)
U