如何从Linux终端压缩或解压缩文件
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,unzip和其他实用程序
您可能已经知道,诸如macOS之类的Linux和类似Unix的操作系统具有允许您创建ZIP文件并从中提取文件的工具,称为 压缩
和 解压缩
。但是有一整套相关的实用程序,例如 拉链披风
, 拉链细节
, 拉链
, 和 邮递区号
.
我们检查了一些Linux发行版,以查看它们是否在标准安装中包括了这些实用程序。所有实用程序都存在于Ubuntu 19.04、18.10和18.04中。它们还出现在Manjaro 18.04中。包含Fedora 29 压缩
和 解压缩
,但没有其他实用程序,CentOS也是如此。
要在Fedora 29上安装缺少的元素,请使用以下命令:
须藤dnf安装perl-IO-Compress
要在CentOS 7上安装缺少的元素,请使用以下命令:
sudo yum安装perl-IO-Compress
如果上述未提及的Linux发行版中缺少任何zip实用程序,请使用该Linux发行版的程序包管理工具来安装所需的程序包。
如何使用zip命令创建一个ZIP文件
要创建一个ZIP文件,您需要告诉 压缩
存档文件的名称以及要包含在其中的文件。您无需在档案名称中添加“ .zip”扩展名,但这对您没有害处。
创建一个名为 source_code.zip
包含当前目录中的所有C源代码文件和头文件,您将使用以下命令:
邮政编码* .c * .h
每个文件都会按添加顺序列出。显示文件名和对该文件执行的压缩量。
如果您查看新的ZIP存档,则可以看到“ .zip”文件扩展名已由 压缩
.
ls -l source_code.zip
如果您不想看到来自的输出 压缩
在创建ZIP文件时,请使用 -q
(安静)选项。
zip -q源代码* .c * .h
在ZIP文件中包括目录
要将子目录包含在ZIP文件中,请使用 -r
(递归)选项,并在命令行上包含子目录的名称。要像以前一样创建一个ZIP文件并包含归档子目录,请使用此命令。
zip -r -q源代码存档/ * .c * .h
考虑到要从要创建的ZIP文件中提取文件的人,通常礼貌地创建ZIP文件,并将其中的文件包含在目录中。接收ZIP文件的人将其解压缩后,所有文件都整齐地放置在其计算机上的目录中。
在以下命令中,我们将存档 工作
目录和所有子目录。请注意,此命令是从 上级目录 的 工作
文件夹。
zip -r -q source_code工作/
设定压缩等级
您可以设置将文件添加到ZIP归档文件时对其应用的压缩程度。范围是0到9,其中0根本没有压缩。压缩率越高,创建ZIP文件所需的时间越长。对于大小适中的ZIP文件,时间差异不是很大的损失。但是,对于中等大小的ZIP文件,无论如何,默认压缩(级别6)可能已经足够好了。
要得到 压缩
要使用特定级别的压缩,请在命令行上将数字作为选项传递,并带有“-”,如下所示:
zip -0 -r -q source_code工作/
默认压缩级别为6。无需提供 -6
选项,但这样做不会造成任何伤害。
zip -r -q source_code工作/
最大压缩级别为9。
邮编-9 -r -q source_code工作/
选择要在此处存档的文件和目录后,无压缩(级别0)与默认压缩(级别6)之间的差为400K。默认压缩与最高压缩级别(9级)之间的差异仅为4K。
这看起来似乎并不多,但是对于包含数百甚至数千个文件的存档而言,每个文件少量的额外压缩将总计节省宝贵的空间。
将密码添加到ZIP文件
将密码添加到ZIP文件很容易。使用 -e
(加密)选项,系统会提示您输入密码并重新输入以进行验证。
zip -e -r -q source_code工作/
如何使用unzip命令解压缩ZIP文件
要从ZIP文件中提取文件,请使用unzip命令,并提供ZIP文件的名称。注意你 做 需要提供“ .zip”扩展名。
解压source_code.zip
提取文件后,它们会列在终端窗口中。
ZIP文件不包含文件所有权的详细信息。提取的所有文件的所有者均设置为提取文件的用户。
就像 压缩
, 解压缩
有一个 -q
(安静)选项,这样您就无需在提取文件时看到文件清单。
解压缩-q source_code.zip
将文件提取到目标目录
要将文件提取到特定目录中,请使用 -d
(目录)选项,并提供您要将归档文件提取到的目录的路径。
解压缩-q source_code.zip -d ./development
提取受密码保护的ZIP文件
如果已使用密码创建了ZIP文件, 解压缩
会要求您输入密码。如果您没有提供正确的密码,解压缩
不会解压缩文件。
解压缩-q source_code.zip
如果您不希望别人看到您的密码,也不必担心密码是否存储在命令历史记录中,则可以在命令行中提供密码,其中包括 -P
(密码)选项。 (您必须使用大写字母“ P”。)
解压-P fifty.treacle.cutlass -q source_code.zip
排除文件
如果您不想提取特定文件或文件组,请使用 -X
(排除)选项。在此示例中,我们希望提取所有以“ .h”扩展名结尾的文件。
解压-q source_code.zip -x * .h
覆盖文件
假设您提取了一个存档,但是误删除了一些提取的文件。
一个快速的解决方法是再次提取文件。但是,如果您尝试将ZIP文件解压缩到与以前相同的目录中, 解压缩
将提示您做出有关覆盖文件的决定。它将期望以下响应之一。
除了 [R
(重命名)响应,这些响应区分大小写。
- y: 是的,覆盖此文件
- n: 不,请勿覆盖此文件
- A: 全部,覆盖所有文件
- N: 无,不覆盖任何文件
- r: 重命名,解压缩此文件,但重新命名。系统将提示您输入一个新名称。
强迫 解压缩
要覆盖所有现有文件,请使用 -o
(覆盖)选项。
解压-o -q source_code.zip
替换丢失文件的最有效方法是 解压缩
仅提取存档中的以下任何文件: 不是 在目标目录中。为此,请使用 -n
(从不覆盖)选项。
解压缩-n source_code.zip
在ZIP文件中查找
解压缩ZIP文件之前,先查看文件列表通常是有用且有启发性的。您可以使用 -l
(列表存档)选项。它通过管道输送 较少的
使输出易于管理。
解压-l source_code.zip |较少的
输出显示ZIP文件中的目录和文件,它们的长度以及它们添加到存档中的时间和日期。按“ q”退出 较少的
.
正如我们将看到的,还有其他窥视ZIP文件的方法,它们可以提供不同类型的信息。
使用zipcloak命令添加密码
如果您已创建ZIP文件,但忘记添加密码,该怎么办?您可以使用 拉链披风
命令。在命令行上传递ZIP文件的名称。系统将提示您输入密码。您需要再次输入密码以验证密码。
zipcloak source_code.zip
使用zipdetails命令查看文件详细信息
这 拉链细节
命令将向您显示 很多 有关ZIP文件的信息。处理此命令可以提供的输出量的唯一明智的方法是将其通过管道传输 较少的
.
zipdetails source_code.zip |较少的
请注意,即使ZIP文件受密码保护,该信息也将包含文件名。这种类型的信息作为元数据存储在ZIP文件中,而不是加密数据的一部分。
使用zipgrep命令在文件内搜索
这 邮编
命令允许您搜索 在文件内 在一个ZIP文件中。在以下示例中,我们想知道ZIP文件中的哪些文件中包含文本“ keyval.h”。
zipgrep keyval.h source_code.zip
我们可以看到文件 slang.c
和 getval.c
包含字符串“ keyval.h”。我们还可以看到,在ZIP文件的不同目录中,每个文件都有两个副本。
使用zipinfo命令查看信息
这 邮递区号
命令为您提供了另一种查看ZIP文件内部的方法。和以前一样,我们将输出通过 较少的
.
zipinfo source_code.zip |较少的
输出从左至右显示:
- 文件权限
- 用于创建ZIP文件的工具的版本
- 原始档案大小
- 文件描述符(如下所述)
- 压缩方法(在这种情况下为放气)
- 数据和时间戳
- 文件名和任何目录
文件描述符由两个字符组成。第一个字符是“ t”或“ b”,表示文本或二进制文件。如果是大写字母,则文件被加密。第二个字符可以是四个字符之一。此字符表示此文件包括什么类型的元数据:无,扩展的本地头,“额外字段”或两者兼而有之。
- -: 如果都不存在,则该字符将为连字符
- l: 如果存在扩展的本地标头,但没有多余的字段
- X: 如果没有扩展的本地头,但是有一个额外的字段
- X: 如果有扩展的本地标头,并且有一个额外的字段
使用zipsplit命令分割文件
如果您需要将ZIP文件发送给其他人,但存在大小限制或文件传输问题,则可以使用 拉链
命令将原始ZIP文件拆分为一组较小的ZIP文件。
这 -n
(大小)选项可让您为每个新的ZIP文件设置最大大小。在此示例中,我们将 source_code.zip
文件。我们不希望任何新的ZIP文件大于100 KB(102400字节)。
zipsplit -n 102400 source_code.zip
您选择的大小不能小于ZIP文件中任何文件的大小。
使用这些命令,您可以创建自己的ZIP文件,解压缩收到的ZIP文件,并对它们执行各种其他操作,而无需离开Linux终端。