zip 與 unzip:跨平台壓縮實戰 文章首圖

zip 與 unzip:跨平台壓縮實戰

zip 與 unzip:跨平台壓縮實戰

在 Linux 的世界裡,我們習慣使用 targzipbzip2 來處理檔案壓縮。然而,當你需要將檔案傳給使用 Windows 或 macOS 的同事,或者需要在不同的作業系統間交換資料時,zip 格式因其廣泛的相容性,成為了事實上的標準。今天,我們將深入探討在 Ubuntu 22.04 與 Debian 12 環境下,如何高效地使用 zipunzip 指令,解決日常工作中的壓縮與解壓縮需求。

安裝與環境準備

雖然 zip 在許多 Linux 發行版中預設未安裝,但它在官方套件庫中。在 Ubuntu 或 Debian 上,你可以透過以下指令輕鬆安裝:

sudo apt update
sudo apt install zip unzip

安裝完成後,我們可以開始探索其強大的功能。

zip 指令實戰:壓縮檔案與目錄

zip 指令的基本語法為 zip [選項] 壓縮檔名 來源檔案或目錄。它支援遞迴壓縮目錄,這是它與 gzip 最大的不同之處。

基本壓縮

假設你有一個名為 report.txt 的檔案,想要將其壓縮為 report.zip

zip report.zip report.txt

執行後,終端機會顯示壓縮進度與節省的空間百分比:

  adding: report.txt (deflated 70%)

這表示檔案已成功加入,且壓縮率為 70%。

壓縮整個目錄

若要壓縮整個目錄,必須加上 -r(recursive)選項。例如,壓縮 project 資料夾:

zip -r project_backup.zip project/

注意結尾的斜線 / 並非絕對必要,但加上可以明確表示這是一個目錄。執行結果會列出所有被納入壓縮的檔案。

進階選項:加密與排除檔案

在傳輸敏感資料時,加密功能至關重要。使用 -e(encrypt)選項,系統會提示你輸入兩次密碼:

zip -e -r sensitive_data.zip confidential_folder/

執行後,你會在終端看到:

Enter password:
Verify password:
  adding: confidential_folder/ (stored 0%)
  adding: confidential_folder/data.csv (deflated 50%)

若你需要排除特定類型的檔案(例如日誌檔),可以使用 -x 選項:

zip -r archive.zip . -x "*.log" "*.tmp"

這會壓縮目前目錄下的所有檔案,但排除所有 .log.tmp 副檔名。

unzip 指令實戰:解壓縮與管理

解壓縮同樣簡單。若檔案有加密,unzip 會自動提示輸入密碼。

基本解壓縮

project_backup.zip 解壓縮到目前目錄:

unzip project_backup.zip

輸出內容如下:

Archive:  project_backup.zip
   creating: project/
  inflating: project/src/main.py  
  inflating: project/README.md    

指定解壓縮路徑

若你想將壓縮檔的內容解壓縮到特定的目錄(例如 /tmp/extracted),可以使用 -d 選項:

unzip project_backup.zip -d /tmp/extracted

測試壓縮檔完整性

在解壓縮重要資料前,檢查檔案是否損壞是一個好习惯。使用 -t 選項:

unzip -t report.zip

若檔案完好,輸出最後一行會顯示:

  No errors detected in compressed data of report.zip.

若檔案損壞,則會顯示具體的錯誤資訊,如 error [invalid local header]

常見問題與解決方案

1. 中文檔名亂碼問題

在 Windows 與 Linux 之間交換壓縮檔時,最常見的問題是中文檔名變成亂碼。這是因為編碼格式不一致所致。

解決方案: 在壓縮時,建議明確指定編碼。雖然新版 zip 對 UTF-8 支援較好,但若仍遇到問題,可嘗試使用 unzip 時指定編碼,或在壓縮後確認檔案屬性。在較新的 Ubuntu 版本中,zip 預設已嘗試使用 UTF-8,若仍有問題,可考慮使用 7z 工具作為替代方案,或確保雙方系統區域設定(Locale)一致。

2. 壓縮檔已存在時的覆蓋提示

當解壓縮時,若目標目錄中已存在同名檔案,unzip 預設會詢問是否覆蓋,這在自動化腳本中可能造成阻礙。

解決方案: 使用 -o(overwrite)選項強制覆蓋,或 -n(never overwrite)選項完全保留舊檔:

# 強制覆蓋
unzip -o archive.zip

# 不覆蓋已存在的檔案
unzip -n archive.zip

小結

zipunzip 雖然看似簡單,但透過熟練運用 -r-e-x-d 等選項,能夠應對絕大多數的跨平台壓縮需求。對於 Linux 使用者而言,掌握這些指令不僅能提升工作效率,更能確保在混合作業系統環境中的資料交換順暢無阻。下次在需要打包資料時,不妨試試看這些實戰技巧,讓檔案管理變得更加輕鬆。