Zip 是最广泛使用的归档文件格式,支持无损数据压缩。一个 zip 文件是一个数据容器,其中包含一个或多个压缩文件或目录,可以在以后提取以恢复原始文件。
Zip 还提供了一系列高级功能。你可以给你的 ZIP 归档文件加上密码保护以保护你的数据,或者将大文件拆分成更小的部分以使其更易管理。
在本文中,我们将解释如何在 Linux 系统中使用 unzip
命令来解压文件。
安装 unzip
unzip
实用程序在大多数 Linux 发行版中默认情况下未安装。但是,你可以使用你的发行版的软件包管理器轻松安装它。
在 Ubuntu 和 Debian 上安装 unzip
sudo apt install unzip
在 CentOS 和 Fedora 上安装 unzip
sudo yum install unzip
如何解压 ZIP 文件
在最简单的形式下,当不带任何选项使用时,unzip
命令将从指定的 zip 归档中提取所有文件到当前目录。
例如,假设你下载了 WordPress 安装包 的 zip 文件。要将此文件解压到当前目录,你只需运行以下命令:
unzip latest.zip
Zip 文件不存储所有权信息。提取的文件将由运行该命令的用户拥有。
你必须对你正在提取 ZIP 归档的目录拥有写权限。
抑制 unzip
命令的输出
默认情况下,unzip
会打印它正在提取的所有文件的名称,并且一旦提取过程完成,它还会给出一个摘要。
要抑制消息的打印,使用 -q
选项:
unzip -q filename.zip
将 ZIP 文件解压到不同的目录
如果你想将 zip 文件的内容解压到除了当前工作目录以外的目录,你可以使用 -d
选项。这允许你指定你想要提取文件的目标目录的路径。
unzip filename.zip -d /path/to/directory
例如,要将 WordPress 归档 latest.zip
解压到 /var/www/
目录,你可以使用以下命令:
sudo unzip latest.zip -d /var/www
在上面的命令中,我们使用了 [sudo](<https://linuxize.com/post/sudo-command-in-linux/>)
因为我们登录的用户通常没有写权限到 /var/www
目录。当使用 sudo
解压 zip 文件时,提取的文件和目录的所有者是 root 用户。
解压带密码保护的 ZIP 文件
如果你有一个受密码保护的 zip 文件,并且你想提取其内容,你可以使用 unzip 命令,并带上 -P
选项。该选项允许你指定打开文件所需的密码。一旦输入正确的密码,zip 文件的内容将被提取到当前目录。
unzip -P 密码 filename.zip
在命令行上输入密码是不安全的,应该避免使用。一个更安全的选择是在不使用 -P
选项的情况下运行该命令。
如果 zip 文件受密码保护,unzip
将提示你输入密码:
unzip filename.zip
输入密码并按回车键。
archive: filename.zip[filename.zip] file.txt password:
只要密码正确,unzip
将为归档中的所有加密文件使用相同的密码。
在解压 ZIP 文件时排除文件
当你想要从归档中排除特定文件或目录时,使用 -x
选项,后面跟着你想要从提取过程中排除的归档文件列表,用空格分隔。
unzip filename.zip -x 要排除的文件1 要排除的文件2
在下面的示例中,我们正在从 zip 归档中提取所有文件和目录,但排除了 .git
目录:
unzip filename.zip -x "*.git/*"
覆盖现有文件
假设你先前已提取了 zip 文件的内容,现在你正在尝试再次执行相同的命令。换句话说,你正在尝试再次解压相同的文件。
unzip latest.zip
默认情况下,unzip
会询问你是否只想要覆盖当前文件、覆盖所有文件、跳过提取当前文件、跳过提取所有文件,或者重命名当前文件。
Archive: latest.zipreplace wordpress/xmlrpc.php? [y]es, [n]o, [A]ll, [N]one, [r]ename:
如果你想要在不提示的情况下覆盖现有文件,请使用 -o
选项:
unzip -o filename.zip
请谨慎使用此选项。如果之前对文件进行了任何更改,那些更改将会丢失。
解压 ZIP 文件而不覆盖现有文件
假设你已解压了一个 zip 文件并修改了其中一些文件。但是,你误删除了一些你现在需要从 zip 归档中恢复的文件。现在你想要做的是从 zip 归档中恢复已删除的文件,同时保留你所做的更改。
在这种情况下,使用 -n
选项,它指示 unzip
如果目标目录中已存在文件,则跳过该文件的提取:
unzip -n filename.zip
解压多个 ZIP 文件
你可以使用正则表达式来匹配多个归档。
例如,如果你的当前工作目录中有多个 zip 文件,你可以只使用一个命令来解压所有文件:
unzip '*.zip'
请注意在 *.zip
周围的单引号。如果忘记对参数加引号,shell 将会扩展通配符字符,并且你会收到错误。
列出 ZIP 文件的内容
要列出 zip 文件的内容,请使用 -l
选项:
unzip -l filename.zip
在下面的示例中,我们正在列出所有 WordPress 安装文件:
unzip -l latest.zip
输出将如下所示:
Archive: latest.zip Length Date Time 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 7415 2023-03-18 17:13 wordpress/readme.html...... 21323 2023-03-09 01:15 wordpress/wp-admin/themes.php 8353 2022-09-10 18:20 wordpress/wp-admin/options-reading.php 4620 2021-10-24 00:12 wordpress/wp-trackback.php 1889 2023-05-03 00:11 wordpress/wp-comments-post.php--------- ------- 27271400 1648 个文件
结论
[unzip](https://linux.die.net/man/1/unzip)
是一个命令行工具,允许你列出、测试和提取压缩的 zip 归档文件。
要在 Linux 系统上创建 ZIP 归档文件,你可以使用 [zip
命令](https://linuxize.com/post/how-to-zip-files-and-directories-in-linux/) 。
如果你有任何问题,请随时留下评论。