如何从Linux终端压缩或解压缩文件

Linux shell提示符

ZIP文件是Windows,macOS甚至Linux系统中常用的通用存档。您可以使用一些常见的Linux终端命令创建zip存档或解压缩文件。

ZIP压缩存档文件格式

由于Windows格式中ZIP格式的主导地位,ZIP文件可能是世界上最常见的压缩存档形式。

虽然.tar.gz和tar.bz2文件在Linux上很常见,但Windows用户可能会以ZIP格式向您发送存档。而且,如果您想归档某些文件并将其发送给Windows用户,则ZIP格式将是适合所有人的最简单,最兼容的解决方案。

有关: 如何从Linux上的.tar.gz或.tar.bz2文件中提取文件

zip,解压缩和其他实用程序

您可能已经知道,像MacOS这样的Linux和类Unix操作系统有工具允许您创建ZIP文件并从中提取文件,称为 压缩拉开拉链。但是,有一整套相关的公用事业,如 zipcloakzipdetailszipsplit ,和 zipinfo

我们检查了一些Linux发行版,看它们是否在标准安装中包含了这些实用程序。所有这些实用程序都出现在Ubuntu 19.04,18.10和18.04中。他们也出现在Manjaro 18.04。包括Fedora 29 压缩拉开拉链,但没有其他公用事业,这也是CentOS的情况。

要在Fedora 29上安装缺少的元素,请使用以下命令:

sudo dnf install perl-IO-Compress

Fedora的zip安装命令

要在CentOS 7上安装缺少的元素,请使用以下命令:

sudo yum install perl-IO-Compress

Centos中的Zip安装命令

如果上面未提到的Linux发行版中缺少任何zip实用程序,请使用该Linux发行版的程序包管理工具来安装所需的程序包。

如何使用zip命令创建ZIP文件

要创建ZIP文件,您需要告诉 压缩 存档文件的名称以及要包含在其中的文件。您不需要在存档名称中添加“.zip”扩展名,但如果这样做,则不会有任何损害。

创建一个名为的文件 source_code.zip 包含当前目录中的所有C源代码文件和头文件,您将使用以下命令:

zip source_code * .c * .h

终端窗口中的zip命令

每个文件都会在添加时列出。将显示该文件的名称以及在该文件上实现的压缩量。

在终端窗口中输出zip命令

如果你看一下新的ZIP存档,你会发现自动添加了“.zip”文件扩展名 压缩

ls -l source_code.zip

ls在终端窗口中的zip存档

如果你不想看到输出 压缩 在创建ZIP文件时,使用 -q (安静)选项。

zip -q source_code * .c * .h

终端窗口中的-q quiet选项

在ZIP文件中包含目录

要在ZIP文件中包含子目录,请使用 -r (递归)选项,并在命令行中包含子目录的名称。要像以前一样创建ZIP文件并包含存档子目录,请使用此命令。

zip -r -q source_code archive / * .c * .h

-r终端窗口中的递归选项

为了考虑将要从您正在创建的ZIP文件中提取文件的人,创建ZIP文件通常是礼貌的,其中包含在目录中的文件。当收到ZIP文件的人提取它时,所有文件都整齐地放在他们计算机上的目录中。

在以下命令中,我们将归档 工作 目录和所有子目录。请注意,此命令是从。的父目录发出的 工作 夹。

zip -r -q source_code工作/

在终端窗口中压缩工作目录

设置压缩级别

您可以设置在将文件添加到ZIP存档时对文件应用的压缩程度。范围从0到9,0根本没有压缩。压缩越高,创建ZIP文件所需的时间越长。对于适度大小的ZIP文件,时差不是一个重要的惩罚。但是,对于适度大小的ZIP文件,默认压缩(级别6)无论如何都可能足够好。

要得到 压缩 要使用特定级别的压缩,请在命令行上将该数字作为选项传递,使用“ – ”,如下所示:

zip -0 -r -q source_code工作/

终端窗口中的-0压缩选项

默认压缩级别为6.无需提供 -6 选项,但是如果你这样做就不会有害。

zip -r -q source_code工作/

终端窗口中的6级压缩

最大压缩级别为9级。

zip -9 -r -q source_code工作/

终端窗口中的-9压缩

通过选择在此存档的文件和目录,无压缩(级别0)和默认压缩(级别6)之间的差异为400K。默认压缩和最高压缩级别(级别9)之间的差异仅为4K。

这可能看起来不多,但对于包含数百甚至数千个文件的档案,每个文件的少量额外压缩可以节省大量空间。

将密码添加到ZIP文件

将密码添加到ZIP文件很容易。使用 -e (加密)选项,系统会提示您输入密码并重新输入密码进行验证。

zip -e -r -q source_code工作/

在终端窗口中为zip文件添加密码

如何使用unzip命令解压缩ZIP文件

要从ZIP文件中提取文件,请使用unzip命令,并提供ZIP文件的名称。请注意,您需要提供“.zip”扩展名。

解压缩source_code.zip

终端窗口中的解压缩命令

在提取文件时,它们被列在终端窗口中。

在终端窗口中解压缩的输出

ZIP文件不包含文件所有权的详细信息。提取的所有文件都将所有者设置为正在提取它们的用户。

就像 压缩拉开拉链 有个 -q (安静)选项,这样您就不需要在提取文件时看到文件列表。

unzip -q source_code.zip

在终端窗口中解压缩-q选项

将文件提取到目标目录

要将文件提取到特定目录中,请使用 -d (目录)选项,并提供您希望将存档提取到的目录的路径。

unzip -q source_code.zip -d ./development

解压缩到终端窗口中的目标目录

提取受密码保护的ZIP文件

如果已使用密码创建ZIP文件, 拉开拉链 会问你密码。如果您没有提供正确的密码, 拉开拉链 不会提取文件。

unzip -q source_code.zip

在终端窗口中使用password命令解压缩

如果您不关心别人看到您的密码 – 也不关心它是否存储在您的命令历史记录中 – 您可以在命令行上提供密码 -P (密码)选项。 (你必须使用大写“P.”)

unzip -P fifty.treacle.cutlass -q source_code.zip

在终端窗口中使用密码选项解压缩

排除文件

如果您不想提取特定文件或文件组,请使用 -X (排除)选项。在此示例中,我们希望提取除以“.h”扩展名结尾的文件之外的所有文件。

unzip -q source_code.zip -x * .h

在终端窗口中解压缩排除选项

覆盖文件

假设您已经提取了存档但是您错误地删除了一些提取的文件。

一个快速解决方法是再次提取文件。但是,如果您尝试在与以前相同的目录中提取ZIP文件, 拉开拉链 将提示您有关覆盖文件的决定。它将期待以下回应之一。

除了 [R (重命名)响应,这些响应区分大小写。

  • Y: 是的,覆盖此文件
  • N: 不,不要覆盖此文件
  • A: 全部,覆盖所有文件
  • N: 无,不覆盖任何文件
  • R: 重命名,提取此文件,但为其指定一个新名称。系统将提示您输入新名称。

覆盖终端窗口中的提示

强迫 拉开拉链 覆盖任何现有文件使用 -o (覆盖)选项。

unzip -o -q source_code.zip

在终端窗口中覆盖选项

替换丢失文件的最有效方法是 拉开拉链 仅提取存档中不在目标目录中的任何文件。为此,请使用 -n (永不覆盖)选项。

unzip -n source_code.zip

在终端窗口中使用-n从不覆盖选项解压缩

在ZIP文件里面看

在提取ZIP文件之前查看ZIP文件中的文件列表通常很有用且有启发性。你可以这样做 -l (列表存档)选项。它通过管道输送 使输出可管理。

unzip -l source_code.zip |减

在终端窗口中解压缩列表选项

输出显示ZIP文件中的目录和文件,它们的长度以及它们添加到存档中的时间和日期。按“q”退出

在终端窗口中列出存档输出

正如我们将要看到的,还有其他方法可以查看ZIP文件,这些文件提供了不同类型的信息。

使用zipcloak命令添加密码

如果您已创建ZIP文件但忘记添加密码,您可以做什么?您可以使用快速向ZIP文件添加密码 zipcloak 命令。在命令行上传递ZIP文件的名称。系统将提示您输入密码。您需要再次输入密码来验证密码。

zipcloak source_code.zip

zipcloak在终端窗口

使用zipdetails命令查看文件详细信息

zipdetails 命令将显示有关ZIP文件的大量信息。处理此命令可以提供的输出量的唯一合理方法是管理它

zipdetails source_code.zip |减

终端窗口中的zipdetails命令

请注意,即使ZIP文件受密码保护,该信息也将包含文件名。此类信息作为元数据存储在ZIP文件中,不是加密数据的一部分。

在终端窗口中输出zipdetails

使用zipgrep命令在文件内搜索

zipgrep 命令允许您在ZIP文件中搜索文件。在下面的示例中,我们想知道ZIP文件中的哪些文件中包含文本“keyval.h”。

zipgrep keyval.h source_code.zip

终端窗口中的zipgrep命令

我们可以看到文件 slang.cgetval.c 包含字符串“keyval.h”。我们还可以看到ZIP文件中不同目录中的每个文件都有两个副本。

使用zipinfo命令查看信息

zipinfo 命令为您提供另一种查看ZIP文件的方法。和以前一样,我们管理输出

zipinfo source_code.zip |减

终端窗口中的zipinfo命令

从左到右,输出显示:

  • 文件权限
  • 用于创建ZIP文件的工具版本
  • 原始文件大小
  • 文件描述符(如下所述)
  • 压缩方法(在这种情况下是放气)
  • 数据和时间戳
  • 文件名和任何目录

文件描述符由两个字符组成。第一个字符是“t”或“b”表示文本或二进制文件。如果是大写字母,则文件被加密。第二个字符可以是四个字符之一。此字符表示此文件包含的元数据类型:none,扩展本地标头,“额外字段”或两者。

  • – : 如果两者都不存在,则该字符将为连字符
  • L: 如果有一个扩展的本地标题但没有额外的字段
  • X: 如果没有扩展的本地标题但是有一个额外的字段
  • X: 如果有一个扩展的本地标题,并且有一个额外的字段

zipinfo输出在终端窗口中

使用zipsplit命令拆分文件

如果您需要将ZIP文件发送给其他人,但是存在大小限制或文件传输问题,您可以使用 zipsplit 命令将原始ZIP文件拆分为一组较小的ZIP文件。

-n (size)选项允许您为每个新ZIP文件设置最大大小。在这个例子中,我们分裂了 source_code.zip 文件。我们不希望任何新的ZIP文件大于100 KB(102400字节)。

zipsplit -n 102400 source_code.zip

终端窗口中的zipsplit命令

您选择的大小不能小于ZIP文件中任何文件的大小。

使用这些命令,您可以创建自己的ZIP文件,解压缩您收到的ZIP文件,并在不离开Linux终端的情况下对它们执行各种其他操作。

本文机器自动生成,不保证语句完整通顺和表达准确,亦不对内容真实有效性负责,请读者知悉。