压缩包工具怎么选
和 Windows 交换文件时最通用的是 zip 格式,Linux 侧用 zip/unzip 就能处理;7z 能识别更多容器格式(zip、7z、rar、tar 等),对文件名编码的处理也更宽容,遇到 Windows 传来的乱码包通常换它就能正常解出中文名。信创桌面与服务器上装包里通常要额外安装 p7zip 才有 7z 命令。
基本信息
| 打包 | zip -r out.zip dir/ |
|---|---|
| 查看内容 | unzip -l out.zip、7z l out.zip |
| 解压 | unzip out.zip -d /target、7z x out.zip |
| 安装 7z | dnf install -y p7zip(Debian 系为 p7zip-full) |
| 常用选项 | -r 递归、-q 静默、-o 覆盖、-x 排除 |
| 权限要求 | 普通用户;解压到系统目录或改属主才需 root |
典型使用场景
- 把日志目录打包发给厂商做故障分析
- 接收 Windows 同事发来的压缩资料,需要保留中文文件名
- 部署前解压离线安装包到指定目录
- 批量归档时排除临时文件与缓存目录
- 需要给多方分发且对方只用 Windows 时选 zip 格式
打包与查看
打包与查看
zip -r report.zip report/ # 递归打包整个目录
zip -r logs.zip logs/ -x '*.tmp' '*/cache/*' # 排除临时文件与缓存目录
unzip -l report.zip | head # 只列内容不解压
unzip -l report.zip | grep -c '\.txt$' # 统计某类文件数量,核对是否完整解压与编码处理
解压与编码处理
unzip -q report.zip -d /data/report # 静默解压到指定目录
unzip -o report.zip -d /data/report # 覆盖已存在文件
7z l win-files.zip # 先看压缩包内容与文件名显示是否正常
7z x win-files.zip -o/data/win-files # 7z 解压,中文名乱码时通常更规范
convmv -f gbk -t utf-8 -r --notest /data/win-files # 需要时把文件名从 GBK 转 UTF-8常用选项对照
| 需求 | zip/unzip 写法 | 7z 写法 |
|---|---|---|
| 递归打包目录 | zip -r out.zip dir/ | 7z a out.zip dir/ |
| 查看内容不写盘 | unzip -l out.zip | 7z l out.zip |
| 解压到指定目录 | unzip out.zip -d /target | 7z x out.zip -o/target |
| 覆盖已有文件 | unzip -o | 7z x -aoa |
| 中文名乱码 | 换用 7z 解压 | 7z x 或配合 convmv 转码 |
| 排除指定文件 | zip -x '模式' | 7z a -xr!'模式' |
Windows 传过来的 zip 常用 GBK 编码存文件名,Linux 下按 UTF-8 解读就会乱码:先确认是显示问题还是实际文件名问题,再决定是否用 convmv 之类工具转换。
unzip 默认解压到当前目录:脚本里务必写清 -d 目标路径,否则会把一堆文件撒在运行目录里,污染其他程序的目录结构。