Linux zip / unzip 常用命令速查(附实例)

在服务器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 + xztar + zstd,而 zip 的优势在于跨平台兼容性更好,Windows、macOS 和 Linux 都能直接使用。