在 Linux 上處理 Zip 檔案
- 在 Linux 中使用 ZIP 進行簡單壓縮
- 在 Linux 中使用多檔案壓縮
- 在 Linux 中新增資料夾目錄
- 在 Linux 中提取 Zipfile
- 在 Linux 中更新或更新 ZIP 檔案中的檔案
- 在 Linux 中建立跨區 ZIP 檔案
壓縮檔案或 zipfiles 對於外行來說非常常見,是一種將多個檔案和目錄組合並壓縮成單個檔案的好方法。
ZIP 格式自 1989 年以來就已經存在,並且至少從 2000 年代起就已得到現代作業系統的支援。
如果你編寫指令碼來操作 ZIP 檔案或希望更頻繁地使用命令列,你可能會發現這很有幫助。
本教程將向普通 Linux 使用者介紹 ZIP 檔案的建立、更新、合併和拆分以及提取,所有這些都在 Bash shell 命令列上進行。
在 Linux 中使用 ZIP 進行簡單壓縮
zipfile 的最初目的是壓縮。簡而言之,需要一個或多個檔案/目錄。
它結合了每個檔案中的常見模式,並使用特殊的編碼來刪除冗餘資訊,從而可以無損地重建每個檔案中的資料。
你可以閱讀完整的規範這裡。
這很好地展示了這種壓縮的效果以及如何建立 zip 檔案。
建立包含相同資訊的具有相似字元的檔案,例如 Lorem Ipsum
。然後使用 zip
命令將它們放入一個 zip 檔案中。
# we assume a file named lorem.txt exists
# that is at least 15 MB large - you can
# use any online site to make such a file!
user@linux:~$ ls -lh lorem.txt
-rw-r--r-- 1 user user 15M Jan 1 00:00 lorem.txt
user@linux:~$ zip lorem.zip lorem.txt
adding: lorem.txt (deflated 89%)
user@linux:~$ ls -lh lorem
-rw-r--r-- 1 user user 15M Jan 1 00:00 lorem.txt
-rw-r--r-- 1 user user 1.6M Jan 1 00:00 lorem.zip
lorem.txt
檔案包含 26 個可能的英文字母、逗號、句號、空格和換行符。對於總共 30 個唯一字元,僅包含這種字元組合的大檔案非常容易壓縮。
ZIP 的編碼有效地儲存了唯一字元的數量,記錄了它們出現的次數和距離的遠近。比原始檔案儲存更小,並允許在從 zipfile 中提取檔案時進行完全重建。
在 Linux 中使用多檔案壓縮
語法很簡單,可以壓縮多個沒有目錄的檔案。
# assume we have three files - lorem1, lorem2, lorem3.
user@linux:~$ zip lorem.zip lorem*
adding: lorem1.txt (deflated 48%)
adding: lorem2.txt (deflated 50%)
adding: lorem3.txt (deflated 49%)
user@linux:~$ ls -lh lorem*
-rw-r--r-- 1 user user 832 Jan 1 00:00 lorem1.txt
-rw-r--r-- 1 user user 862 Jan 1 00:00 lorem2.txt
-rw-r--r-- 1 user user 919 Jan 1 00:00 lorem3.txt
-rw-r--r-- 1 user user 1.8K Jan 1 00:00 lorem.zip
在 Linux 中新增資料夾目錄
要將資料夾新增到 zipfile,請指定遞迴 -r
選項並在 zip 檔案路徑後指定資料夾名稱,如下所示。
# assuming a folder named loremfiles exists
user@linux:~$ zip -r lorem.zip loremfiles/
在 Linux 中提取 Zipfile
zip
實用程式不包括提取功能。相反,這將由 unzip
處理。其語法非常簡單。
unzip lorem.zip
在 Linux 中更新或更新 ZIP 檔案中的檔案
在包含它的 zipfile 中對你想要相應更新的檔案進行更改。你可以使用更新的 -f
標誌使 zip
在 zipfile 中查詢原始檔案。
檢查它們是否在 zipfile 被修改後發生了變化,並新增現有檔案的較新版本。
例如,在前面的示例中,如果我們修改 lorem1.txt
並執行以下命令,我們可以更新
我們的 lorem
zip 檔案並進行更改。
user@linux:~$ zip -f lorem.zip
freshening: lorem1.txt (deflated 48%)
我們可以使用更新 -u
選項來獲得更多功能。
除了使用較新的檔案更新 zipfile 之外,它還可以將新檔案新增到現有的 zipfile 並在 zipfile 不存在時建立它。
# we change lorem3.txt, and create lorem4 and lorem5
user@linux:~$ zip -u lorem.zip lorem*
updating: lorem3.txt (deflated 49%)
adding: lorem4.txt (deflated 49%)
adding: lorem5.txt (deflated 49%)
在 Linux 中建立跨區 ZIP 檔案
我們可能會避免通過 Internet 傳送一個巨大的檔案以節省頻寬。相反,傳送多個檔案,以便在其他檔案失敗時至少部分檔案可以通過。
我們可以嘗試重新傳送它們。ZIP 提供了將一個非常大的 zip 檔案拆分為多個部分的選項,稱為跨區存檔。
要嘗試一個示例,請查詢一個大檔案或使用隨機資料建立一個檔案,如下所示。
dd if=/dev/urandom of=frnd count=16384 bs=1024
這會在本地目錄中生成一個名為 frnd
的 16 MB 檔案。然後我們使用如圖所示的 zip
命令將其拆分為 2 部分的 zip 檔案,每部分 8 MB。
zip -r -s 8m rnd.zip frnd
這將生成兩個名為 rnd.z01
和 rnd.z02
的 8 MB 檔案以及一個名為 rnd.zip
的檔案結尾 zip。最後一個是必要的,以指示解壓縮
已達到檔案結尾簽名。
多個檔案組成一個有效的 zip 存檔以解壓縮,將檔案連線成一個 zip,然後解壓縮結果。
cat rnd.z* > final.zip
unzip final.zip