在Linux中使用Zip命令
描述
zip命令是任何操作系统上最有用的工具之一。它允许你将多个文件压缩成一个压缩的档案文件。然后你可以使用解压缩命令解压该档案文件。本教程将告诉你如何使用zip命令来创建和提取档案。
在本教程中,我们将了解Linux中的zip命令行工具。我们将学习如何使用它来创建和提取档案。zip命令是GNU核心实用程序包的一部分。它可以用来创建和提取档案文件。
基本用法
z
(或x
)命令最基本的用途之一是将一个文件压缩成一个档案。例如,我们可以将两个文本文件压缩成一个名为important-backup.tar.gz的归档文件,输入 –
$ zip important-backup.zip credentials.txt statement.txt
adding: credentials.txt (stored 0%)
adding: statement.txt (stored 0%)
在不解压缩的情况下列出存档内容
我们有时只需要看一下归档文件的内容,而不需要提取它们。为了达到这个目的,可以使用zipinfo命令和unarchive命令,它们都是zip包的一部分。
如果我们想看一个名为 “archive.zip “的归档文件的内容,我们可以使用命令行工具zipinfo来做 —
$ zipinfo important-backup.zip
Archive: important-backup.zip
Zip file size: 347 bytes, number of entries: 2
-rw-r--r-- 3.0 unx 8 tx stor 21-May-03 11:22 credentials.txt
-rw-r--r-- 3.0 unx 5 tx stor 21-May-03 11:22 statement.txt
2 files, 13 bytes uncompressed, 13 bytes compressed: 0.0%
我们可以使用unzip命令直接列出归档文件的内容。
$ unzip -l important-backup.zip
Archive: important-backup.zip
Length Date Time Name
--------- ---------- ----- ----
8 2021-05-03 11:22 credentials.txt
5 2021-05-03 11:22 statement.txt
--------- -------
13 2 files
使用-l选项,tar程序实际上并不解压缩,而只是显示其内容。
在不解压缩的情况下删除档案中的文件
如果你想从存档的备份中删除一些文件而不提取它们,请使用 zip 命令的 -d 选项。例如,如果你想删除 important-backup 文件夹中的 statement.txt 文件,运行下面的命令 -d。
$ zip -d important-backup.zip statement.txt
deleting: statement.txt
让我们看看在命令返回后,归档的important-backups.zip文件里有什么。
$ zipinfo important-backup.zip
Archive: important-backup.zip
Zip file size: 188 bytes, number of entries: 1
-rw-r--r-- 3.0 unx 8 tx stor 21-May-03 11:22 credentials.txt
1 file, 8 bytes uncompressed, 8 bytes compressed: 0.0%
我们可以看到statement.txt已经从压缩文件中被删除,而不必先解压其内容。
加密档案
zip命令提供了-e标志来加密档案,要求提供一个密码,作为生成的加密档案的加密密钥。
让我们创建并加密一个存档文件 encrypted-backup.zip —
$ zip -e encrypted-backup.zip bank-accounts.txt credentials.txt
Enter password:
Verify password:
adding: bank-accounts.txt (stored 0%)
adding: credentials.txt (stored 0%)
通过调用-e标志,该命令将要求我们提供一个密码,该密码将被用来加密数据。
如果我们现在试图解压缩档案,它会要求我们提供解压缩的密码—。
$ unzip encrypted-backup.zip
Archive: encrypted-backup.zip
[encrypted-backup.zip] bank-accounts.txt password:
然而,我们仍然可以在不知道密码的情况下,使用zipinfo和unzip等工具列出加密档案的内容——。
$ zipinfo encrypted-backup.zip
Archive: encrypted-backup.zip
Length Date Time Name
--------- ---------- ----- ----
17 2021-05-03 11:49 bank-accounts.txt
8 2021-05-03 11:22 credentials.txt
--------- -------
25 2 files
我们可以看到,当我们试图阅读其内容列表时,它没有提示我们输入密码。
递归遍历子目录
通常情况下,zip命令不会创建一个目录及其内容的档案。但是,当添加了-r标志后,zip会从子目录中收集文件,形成一个单一的档案。
例如,假设我们有一个目录prod-secret,其中包含一些秘密文件–
$ ls prod-secret
kafka-passwd.secret mongo-passwd.secret mysql-passwd.secret
要创建整个prod-secret目录的档案,我们可以运行带有标志-r -的zip命令。
$ zip -r prod-secret.zip prod-secret
adding: prod-secret/ (stored 0%)
adding: prod-secret/mysql-passwd.secret (stored 0%)
adding: prod-secret/mongo-passwd.secret (stored 0%)
adding: prod-secret/kafka-passwd.secret (stored 0%)
运行带有选项-r的命令可以确保目录内的文件也被包括在内。
然而,zip命令将忽略prod-secret目录中的文件,如果没有标志-r –
$ zip prod-secret prod-secret
adding: prod-secret/ (stored 0%)
包括和排除文件模式
我们可以使用 zip 文件来创建过滤器,这些过滤器将包括或排除某些文件。此外,这些过滤器是通过glob模式识别的。此外,这些过滤器可以被用于创建、删除或刷新。
假设我们在以下目录中工作–
$ tree -a
.
|-- .git
| |-- HEAD
| |-- branch
| `-- tag
|-- credentials.txt
|-- customer-details.txt
`-- prod-secret
|-- .git
| |-- HEAD
| `-- branch
|-- kafka-passwd.secret
|-- mongo-passwd.secret
`-- mysql-passwd.secret
3 directories, 10 files
当我们查看tree命令的输出时,我们可以看到我们的目录遵循一个图形化的结构。出现了两个.git文件夹–一个在当前文件夹,另一个在prod-secret。
包括符合模式的文件和文件夹
我们可以使用-i标志来创建一个包含过滤器。这意味着文件应该遵循过滤器的模式,以便在使用zip命令时被包含。
让我们创建一个仅由.git子文件夹组成的归档文件only-git.zip —
$ zip -r only-git.zip . -i *.git*
adding: prod-secret/.git/ (stored 0%)
adding: prod-secret/.git/branch (stored 0%)
adding: prod-secret/.git/HEAD (stored 0%)
adding: .git/ (stored 0%)
adding: .git/tag (stored 0%)
adding: .git/branch (stored 0%)
adding: .git/HEAD (stored 0%)
从输出结果中,我们可以看到,zip命令只归档与glob匹配的文件夹和文件。
排除符合模式的文件和文件夹
要创建一个排除过滤器,我们可以使用标志-x,后面跟一个glob模式。Zip在使用时将忽略符合排除过滤器模式的文件。特别是,我们可以使用zip -x创建一个排除.git文件夹的存档。
$ zip -r no-git.zip . -x *.git*
adding: prod-secret/ (stored 0%)
adding: prod-secret/mysql-passwd.secret (stored 0%)
adding: prod-secret/mongo-passwd.secret (stored 0%)
adding: prod-secret/kafka-passwd.secret (stored 0%)
adding: customer-details.txt (stored 0%)
adding: credentials.txt (stored 0%)
我们可以从输出中观察到,该命令没有将任何一个.git文件夹添加到no-git.zip存档中。
结论
本教程为我们提供了一个关于zip命令行工具的全面概述。
我们从基本的安装指南开始,同时介绍了语法结构和基本用法。最后,我们介绍了在不解压缩的情况下检查存档内容的方法。
之后,我们说明了一些选择,这些选择使我们对已经存在的档案有了权限。此外,我们还说明了使用递归标志和过滤器来设置归档的一些可能性,以包括和排除什么。