在 Linux 中使用 Zip 命令


概述

zip 命令是任何作業系統上最實用的工具之一。它允許您將多個檔案壓縮到單個壓縮歸檔檔案中。然後,您可以使用 unzip 命令解壓縮該歸檔檔案。本教程將向您展示如何使用 zip 命令建立和提取歸檔檔案。

在本教程中,我們將瞭解 Linux 中的 zip 命令列工具。我們將學習如何使用它建立和提取歸檔檔案。zip 命令是 GNU core utils 軟體包的一部分。它可以用於建立和提取歸檔檔案中的檔案。

基本用法

zip(或 x)命令最基本用途之一是將檔案壓縮到歸檔檔案中。例如,我們可以透過鍵入以下命令將兩個文字文件壓縮到名為 important-backup.tar.gz 的歸檔檔案中:

$ zip important-backup.zip credentials.txt statement.txt
adding: credentials.txt (stored 0%)
adding: statement.txt (stored 0%)

在不解壓縮的情況下列出歸檔檔案內容

有時我們只需要檢視歸檔檔案的內容,而無需提取它們。為此,可以使用 zipinfo 命令和解壓縮命令,這兩個命令都是 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 檔案,請執行以下命令:

$ 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 檔案中刪除,而無需首先解壓縮其內容。

加密歸檔檔案

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 選項執行命令可確保目錄內的檔案也被包含在內。

但是,如果沒有 -r 標誌,zip 命令將忽略 prod-secret 目錄內的檔案:

$ 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 命令列工具。

我們從基本的安裝指南以及語法結構和基本用法開始。最後,我們介紹了在不解壓縮的情況下檢查歸檔檔案內容的方法。

之後,我們說明了一些選擇,這些選擇使我們能夠控制現有的歸檔檔案。此外,我們說明了一些使用遞迴標誌和包含和排除過濾器的設定歸檔檔案的可能性。

更新於: 2023年1月3日

2K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告