• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Linux 壓縮、解壓縮 ZIP 檔案教學與範例

介紹如何在 Linux 系統下以 zip 與 unzip 指令壓縮與解壓縮檔案。

壓縮檔案或目錄

若要將 mydata1.txt 與 mydata2.txt 壓縮成一個 mydata.zip 壓縮檔,可以執行:

# 將 mydata1.txt 與 mydata2.txt 壓縮成 archive.zip
zip archive.zip mydata1.txt mydata2.txt

若要將 myfolder 目錄壓縮成 archive.zip,可以執行:

# 將 myfolder 目錄壓縮成 archive.zip
zip -r archive.zip myfolder

解壓縮檔案

若要解壓縮 ZIP 壓縮檔案,可以使用 unzip 指令。例如解壓縮 archive.zip這個壓縮檔案,則可執行:

# 解壓縮 archive.zip
unzip archive.zip

從標準輸入讀取檔案清單進行壓縮

若 zip 指令加上 -@ 參數,可從標準輸入讀取檔案清單並進行壓縮,這個參數通常會在 Linux 系統上以管線(pipe)的方式搭配其他指令來壓縮指定的檔案。

例如將目前目錄以下的所有 C 語言程式碼檔案(*.c 與 *.h)全部找出來,交給 zip 壓縮:

# 尋找所有 *.c 或 *.h 檔案,交由 zip 進行壓縮
find . -name "*.[ch]" -print | zip -@ archive.zip

搭配管線進行壓縮、解壓縮

zip 指令在指定目的壓縮檔,可以使用連字線(-)來將壓縮資料輸出至標準輸出(standard output),再經由管線(pipe)交由其他指令進行後續處理。

例如以 zip 指令將目前目錄壓縮後:再將壓縮後的資料寫入磁帶:

# 將目前目錄壓縮後寫入磁帶
zip -r - . | dd of=/dev/nrst0 obs=16k

zip 指令也可以在指定來源檔案時,使用連字線(-)來從標準輸入(standard input)讀取要進行壓縮的資料。

例如將目前目錄以 tar 指令打包之後,交給 zip 進行壓縮:

# 將目前目錄以 tar 打包後再以 zip 壓縮
tar cf - . | zip archive.tar.zip -

這種方式的壓縮比通常會比單純使用 zip 搭配 -r 參數還要好,因為可以對不同檔案中重複的內容進行比較好的壓縮。

經由 tar 搭配 zip 產生的壓縮檔,可以用以下指令解開:

# 解壓縮 archive.tar.zip 壓縮檔
unzip -p archive.tar.zip | tar xf -

當 zip 沒有指定任何輸入檔案,且標準輸出也不是終端機時,就會自動從標準輸入讀取資料,壓縮之後導向至標準輸出,可以搭配其他指令進行串流資料的壓縮:

# 壓縮串流資料
tar cf - . | zip | dd of=/dev/nrst0 obs=16k

上面的指令就相當於以下這個指令,只不過上面的指令比較簡潔:

# 壓縮串流資料
tar cf - . | zip - - | dd of=/dev/nrst0 obs=16k

以上面這種串流壓縮的資料,可以使用 funzip 來進行串流資料的解壓縮:

# 解壓縮串流資料
dd if=/dev/nrst0  ibs=16k | funzip | tar xvf -

加密壓縮檔案

若要保護壓縮檔案的內容,可以在執行 zip 指令時加上 -e 參數,然後手動輸入密碼,加密壓縮的檔案,這樣產生的壓縮檔就必須要有密碼才能解開:

# 以手動輸入的密碼來加密壓縮檔案
zip -e -r archive.zip myfolder

壓縮的密碼除了以手動輸入的方式之外,也可以直接以參數來指定,這種方法可以用在自動化處理大量資料的狀況,但以明碼顯示密碼是不安全的,是要特別注意密碼外洩問題。

# 以 MY_PASSWORD 作為密碼來加密壓縮檔案
zip -P MY_PASSWORD -r archive.zip myfolder

若要將一個普通的 ZIP 壓縮檔加上密碼保護,可以使用 zipcloak 指令,其在執行時會需要手動輸入密碼,並將壓縮檔案中所有未加密的項目都加上密碼保護:

# 加密一般壓縮檔
zipcloak archive.zip

unzip 在遇到具有密碼保護的 ZIP 檔案時,會自動要求使用者輸入解壓縮的密碼,而若要自動化處理大量的加密壓縮檔案,可以使用 -P 參數來指定解壓縮密碼:

# 指定解壓縮密碼
unzip -P MY_PASSWORD archive.zip

分割 ZIP 壓縮檔

如果一個 ZIP 壓縮檔內包含大量的檔案,造成 ZIP 檔案大小過大,可以考慮以 zipsplit 指令搭配 -n 參數指定每塊分割大小上限,將大型的 ZIP 檔案分割為多個小型的 ZIP 壓縮檔:

# 將壓縮檔切割為多個 1MB 以下的壓縮檔
zipsplit -n 1048576 archive.zip

讀取與編輯 ZIP 壓縮檔註解

zipnote 指令可以用來輸出或寫入 ZIP 檔案的註解資訊:

# 輸出壓縮檔註解資訊
zipnote archive.zip > comments.tmp

# 寫入壓縮檔註解資訊
zipnote -w archive.zip < comments.tmp

參考資料

  • Linuxize:How to Unzip Files in Linux
  • How-To Geek:How to Zip or Unzip Files From the Linux Terminal
  • LINUX 技術手札:Linux 壓縮及解壓 ZIP 檔
  • ComputerHope:Linux zipsplit command

分類:Linux

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide