Ubuntu 中怎样解压缩文件

[复制链接]
发表于 2026-10-3 16:21:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

一、先分清:ZIP 和"压缩"不是一回事

Zip 是最广泛使用的归档文件格式,支持无损数据压缩。理解"归档"和"压缩"两个概念,用起来才不迷糊:

  • 归档:把一个或多个文件、目录打包进一个容器(zip 文件),之后可以提取还原成原始文件。
  • 压缩:在归档的基础上做无损压缩,减小体积。

Zip 文件不存储所有权(owner)信息,提取出来的文件归运行该命令的用户所有。这一点很重要:你对要提取的目标目录必须有写权限,否则 unzip 会失败。

Zip 还提供了一系列高级功能,比如给归档加密码保护、把大文件拆成更小的分卷便于管理。本文聚焦在 Linux 下用 unzip 解压这个动作本身。

二、安装 unzip

unzip 在大多数 Linux 发行版中默认没装,但用发行版的包管理器装一下就好。

Ubuntu / Debian

sudo apt install unzip

CentOS / Fedora

sudo yum install unzip

装完验证:unzip -v。顺带一句,要对目录做 zip 打包,装的是 zip 包而不是 unzip,两者是一对。

三、最基础的解压

在最简单的形式下,不带任何选项运行 unzip,它会把指定 zip 归档里的所有文件提取到当前目录。

unzip latest.zip

比如你下载了 WordPress 安装包的 zip,要解压到当前目录,就跑上面这一条。

[root@host data]# ls
latest.zip
[root@host data]# unzip latest.zip
Archive:  latest.zip
   creating: wordpress/
  inflating: wordpress/xmlrpc.php
  inflating: wordpress/wp-blog-header.php
   ...
[root@host data]# ls
latest.zip  wordpress/

四、六个高频选项

1. -q:静默模式

默认情况下 unzip 会打印它正在提取的所有文件名,而且提取完成后还会给一个摘要。想屏蔽这些消息,用 -q:

unzip -q filename.zip

适合在脚本里用——输出干净,方便后面自己处理。

2. -d:解压到指定目录

想把内容释放到除当前工作目录以外的目录,用 -d 指定目标路径:

unzip filename.zip -d /path/to/directory

比如把 WordPress 归档 latest.zip 解压到 /var/www/:

sudo unzip latest.zip -d /var/www

这里为什么用 sudo?因为你登录的用户通常对 /var/www 没有写权限。但要记住:用 sudo 解压后,提取的文件和目录的所有者就是 root 了——如果/var/www 下面要跑的是 Web 服务(比如 nginx、php-fpm 以 www-data 身份运行),记得事后 chown 回正确属主,否则访问会报权限错误。

sudo chown -R www-data:www-data /var/www/wordpress

3. -l:只列内容不解压

解压前先看看里面有什么,用 -l:

unzip -l filename.zip
Archive:  latest.zip
  Length      Date    Name
---------  ---------  -------------------------
        0  2023-08-02 22:39   wordpress/
     3065  2021-08-31 18:31   wordpress/xmlrpc.php
      364  2021-12-19 12:20   wordpress/wp-blog-header.php
    21323  2023-03-09 01:15   wordpress/wp-admin/themes.php
---------                     -------
  2727140                     1648 files

远传一个大包之前先 unzip -l 看一眼,能避免传错包、包结构不对这类低级事故。

4. -x:解压时排除某些文件

要排除特定文件或目录,用 -x,后面跟要从提取中排除的归档内文件列表,空格分隔:

unzip filename.zip -x 要排除的文件1 要排除的文件2

比如从 zip 里提取所有内容,但排除 .git 目录:

unzip filename.zip -x "*.git/*"

关键点:-x 匹配的是"归档内部路径",不是磁盘路径;通配符要用引号包起来,否则 shell 会先按当前目录的文件去展开,匹配永远落空。排除一批缓存目录就写 -x "*.git/*" "*.svn/*" "*.log"。

5. 覆盖控制的两个开关:-o 与 -n

假设你先前已解压过一次,现在又跑一遍同样的命令,默认 unzip 会交互式地问你:只覆盖当前文件、覆盖全部、跳过当前、跳过全部,还是重命名。

Archive: latest.zip
replace wordpress/xmlrpc.php? [y]es, [n]o, [A]ll, [N]one, [r]ename:

两条自动化常用答案:

unzip -o filename.zip     # 不提示,直接覆盖已有文件
unzip -n filename.zip     # 不提示,已存在的直接跳过

-o 要谨慎:之前对文件做的任何修改都会丢失(因为它无条件覆盖)。

-n 的用武之地很典型:你已经解压并改过其中一些文件,现在误删了几个想从包里恢复,同时又要保住自己的改动——用 -n 就能只补回缺失的、不动已存在的。

6. -P:解压带密码的归档(以及为什么不该用)

受密码保护的 zip 用 -P 指定密码:

unzip -P 密码 filename.zip

在命令行里明文输入密码是不安全的,应该避免。更稳妥的做法是什么都不加,让 unzip interactive 地提示你:

unzip filename.zip
Archive: filename.zip
[filename.zip] file.txt password:

密码正确后,归档中所有加密文件会使用同一个密码,逐个提示只出现一次。

补充一句:-P 的密码会出现在 ps aux 的输出里,同机其他用户按 ps 就能看到,所以共享机器上一律别用 -P。

五、一次解压多个 zip

用正则表达式匹配多个归档。当前目录有多个 zip 时,一条命令搞定:

unzip '*.zip'

请注意 *.zip 周围的单引号必须加。忘记加引号,shell 会先把通配符展开成实际文件列表传给 unzip,结果往往报 zipfile is not a zip file 之类的错。

六、选项速查表

选项作用示例
-q静默,不打印提取过程unzip -q f.zip
-d解压到指定目录unzip f.zip -d /var/www
-l只列出归档内容unzip -l f.zip
-x排除指定文件unzip f.zip -x "*.git/*"
-o无提示覆盖unzip -o f.zip
-n已存在则跳过(保住自己的改动)unzip -n f.zip
-P指定解压密码(不安全,慎用)unzip -P pwd f.zip
-t只测试归档完整性,不提取unzip -t f.zip

七、其他压缩格式对照

unzip 只管 zip。碰到别的格式换对应的工具:

格式解压打包
.zipunzipzip -r a.zip dir/
.tar.gz / .tgztar -xzf a.tar.gztar -czf a.tar.gz dir/
.tar.bz2tar -xjf a.tar.bz2tar -cjf a.tar.bz2 dir/
.tar.xztar -xJf a.tar.xztar -cJf a.tar.xz dir/
.gz(单文件)gzip -d a.gzgzip a
.rarunrar x / 7z x7z a

最常记混的是 tar 那组字母:z 是 gzip、j 是 bzip2、J 是大写 J 是 xz;x 解包、c 打包;f 必须放最后、后面跟文件名。

小结

unzip 是一个命令行工具,能列出、测试和提取压缩的 zip 归档文件。日常记住四条:

  • 基础:unzip 包.zip 解到当前目录;换目录加 -d /目标路径(用 sudo 后记得 chown 回服务账号);
  • 先看看:unzip -l 列内容、unzip -t 测完整性;
  • 覆盖策略:-o 强覆盖(会丢修改)、-n 跳过已有(适合补回误删);
  • 坑位:-x "*.git/*" 的路径是归档内路径且必须加引号;unzip '*.zip' 的多文件也必须用单引号,否则 shell 先展开就报错。

碰到非 zip 格式,按上面那张表换 tar / gzip 对应命令即可。

(本文由 qidao123.com企服评测-应用市场 编辑提示整理:示例基于 GNU unzip / Info-ZIP,适用于 Ubuntu、Debian、CentOS 等主流 Linux 发行版。)

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表