在服务器VPS运维过程中,zip用于压缩,unzip用于解压缩,这个两个命令经常要用到,但是也经常忘记相关参数。索性写了份总结笔记,需要用到的时候方便直接查询。
安装(Debian/Ubuntu):
sudo apt update
sudo apt install zip unzip
CentOS / Rocky / AlmaLinux:
sudo yum install zip unzip
一、zip 压缩命令
基本语法:
zip [参数] 压缩包.zip 文件或目录
1、压缩单个文件
zip test.zip test.txt
结果:
test.zip
└── test.txt
2、压缩多个文件
zip files.zip a.txt b.txt c.txt
或者:
zip files.zip *.txt
将当前目录所有 txt 文件打包。
3、压缩整个目录(最常用)
必须加 -r(recursive,递归)
zip -r website.zip website/
例如:
website/
├── index.html
├── css/
├── js/
└── images/
压缩后:
website.zip
4、压缩当前目录所有内容
zip -r backup.zip .
如果不想把压缩包自己也打进去,建议:
zip -r backup.zip * .[^.]*
或者在生成后再移动压缩包。
5、压缩多个目录
zip -r backup.zip nginx mysql www
会同时压缩:
nginx/
mysql/
www/
6、压缩时排除某个文件(★★★★★)
使用 -x
例如:
zip -r website.zip website -x "*.log"
排除所有日志文件:
error.log
access.log
不会进入压缩包。
7、排除某个目录(★★★★★)
例如:
zip -r website.zip website -x "website/cache/*"
这样:
website/
├── cache/
│ ├── a.tmp
│ └── b.tmp
整个 cache 目录不会压缩。
如果想排除多个目录:
zip -r website.zip website \
-x "website/cache/*" \
-x "website/uploads/*"
8、排除多个文件类型
例如:
zip -r backup.zip . \
-x "*.log" \
-x "*.tmp" \
-x "*.bak"
9、排除 Git 仓库
很多项目都会这样压缩:
zip -r project.zip project \
-x "*.git*" \
-x "*.idea*" \
-x "*.vscode*"
或者更准确:
zip -r project.zip project \
-x "project/.git/*" \
-x "project/.idea/*"
10、设置压缩密码
zip -e secret.zip file.txt
系统会提示输入密码:
Enter password:
Verify password:
以后解压需要输入密码。
11、指定压缩等级
最高压缩:
zip -9 backup.zip file.iso
最快压缩:
zip -1 backup.zip file.iso
压缩等级:
-0 不压缩
-1 最快
...
-9 压缩率最高
12、更新压缩包
例如:
zip -u website.zip website/index.html
只有文件发生变化时才更新。
13、删除压缩包中的文件
例如:
zip -d website.zip "*.log"
删除 ZIP 中所有 log 文件。
二、unzip 解压命令
基本语法:
unzip 文件.zip
1、解压到当前目录
unzip backup.zip
2、解压到指定目录(★★★★★)
unzip backup.zip -d /data/
例如:
/data/
└── website/
3、查看压缩包内容
不用解压:
unzip -l backup.zip
输出:
Length Name
------ ----
1234 index.html
4567 css/style.css
4、覆盖已有文件
默认会询问:
replace index.php?
直接全部覆盖:
unzip -o backup.zip
5、永不覆盖已有文件
unzip -n backup.zip
已有文件保持不变。
6、静默解压
unzip -q backup.zip
适合脚本。
7、查看压缩包信息
zipinfo backup.zip
输出包括:
- 文件数量
- 创建时间
- 权限
- 压缩率
8、测试 ZIP 是否损坏
unzip -t backup.zip
正常会显示:
No errors detected
三、常见组合实例
实例1:备份网站(排除缓存)
zip -r website.zip website \
-x "website/cache/*"
实例2:备份整个项目(排除 Git)
zip -r project.zip project \
-x "project/.git/*"
实例3:备份服务器(排除日志)
zip -r backup.zip /var/www \
-x "*.log"
实例4:解压到指定目录
mkdir restore
unzip backup.zip -d restore
实例5:查看压缩包内容
unzip -l backup.zip
无需解压即可查看。
实例6:带密码压缩
zip -er secret.zip docs/
说明:
-e:启用密码保护-r:递归压缩目录
四、常用参数速查表
| 参数 | 作用 |
|---|---|
-r |
递归压缩目录(最常用) |
-x |
排除文件或目录 |
-e |
设置密码 |
-u |
更新压缩包 |
-d |
删除 ZIP 中指定文件 |
-1 |
最快压缩 |
-9 |
最大压缩率 |
-o |
解压时覆盖已有文件 |
-n |
解压时不覆盖已有文件 |
-q |
静默模式 |
-l |
查看 ZIP 文件列表 |
-t |
测试 ZIP 是否损坏 |
五、使用建议
- 压缩目录时,一定记得加
-r,否则只会创建一个空目录条目,不会打包目录内容。 - 排除目录时,路径最好写成
"目录/*"的形式,例如-x "cache/*"。 - 如果文件名包含空格,请使用引号包裹路径。
- 在服务器备份时,建议先排除日志、缓存、临时文件,可明显减小压缩包体积。
- 需要更高压缩率时可优先考虑
tar + xz或tar + zstd,而zip的优势在于跨平台兼容性更好,Windows、macOS 和 Linux 都能直接使用。