Linux 下壓縮工具眾多,各有優缺點。本文整理 tar、gzip、bzip2、zip、rar 等主流工具的壓縮、解壓縮指令,並說明適用情境與參數細節。
tar 本身不壓縮,僅打包;搭配 -z(gzip)、-j(bzip2)、-J(xz) 實現壓縮。
| 操作 | 指令 | 參數說明 |
|---|---|---|
| 解壓縮 .tar.gz / .tgz | tar zxvf file.tar.gz | z=gzip, x=解包, v=顯示過程, f=指定檔案 |
| 壓縮目錄為 .tar.gz | tar zcvf file.tar.gz dir/ | c=建立新檔, z=gzip壓縮 |
| 解壓縮 .tar.bz2 | tar jxvf file.tar.bz2 | j=bzip2壓縮 |
| 壓縮目錄為 .tar.bz2 | tar jcvf file.tar.bz2 dir/ | 壓縮率較 gzip 好,速度較慢 |
| 解壓縮 .tar.xz | tar Jxvf file.tar.xz | J=xz壓縮(最高壓縮比) |
| 列出壓縮包內容 | tar ztvf file.tar.gz | t=列出內容,不解壓 |
| 指定解壓目錄 | tar zxvf file.tar.gz -C /target/path | -C 切換目錄後再解壓 |
| 多目錄打包壓縮 | tar zcvf all.tar.gz dir1 dir2 dir3 | 一次打包多個來源 |
| 操作 | 指令 | 備註 |
|---|---|---|
| 壓縮單一檔案 | gzip file.txt | 產生 file.txt.gz,原檔消失 |
| 保留原檔壓縮 | gzip -k file.txt | -k/--keep 保留來源檔 |
| 解壓縮 | gunzip file.txt.gz | 等同 gzip -d |
| 指定壓縮等級 | gzip -9 file.txt | 1 最快、9 最高壓縮(預設 6) |
| 標準輸出壓縮 | cat file.txt | gzip > file.txt.gz | 管線操作,不產生中間檔 |
| 操作 | 指令 | 備註 |
|---|---|---|
| 壓縮 | bzip2 file.txt | 產生 file.txt.bz2 |
| 解壓縮 | bunzip2 file.txt.bz2 | 等同 bzip2 -d |
| 保留原檔 | bzip2 -k file.txt | |
| 測試完整性 | bzip2 -t file.txt.bz2 | 不解壓,僅驗證 |
⚠️ 注意:.bz 為舊版副檔名,現均用 .bz2;bzip2 無法直接壓縮目錄,需搭配 tar。
# 壓縮
compress file.txt # 產生 file.txt.Z
# 解壓縮
uncompress file.txt.Z # 還原 file.txt
# 搭配 tar
tar Zcvf file.tar.Z dir/
tar Zxvf file.tar.Z
💡 歷史格式,壓縮率低,現已極少使用。
| 操作 | 指令 | 備註 |
|---|---|---|
| 壓縮目錄(遞迴) | zip -r file.zip dir/ | -r 遞迴包含子目錄 |
| 解壓縮 | unzip file.zip | 預設解壓到當前目錄 |
| 指定解壓目錄 | unzip -d /target file.zip | -d 指定目標路徑 |
| 覆蓋不提示 | unzip -o file.zip | -o 直接覆蓋 |
| 列出內容 | unzip -l file.zip | 不解壓,僅檢視 |
| 加密壓縮 | zip -e secret.zip file.txt | -e 設定密碼 |
# 安裝(CentOS/RHEL)
yum install -y unrar
# 或下載官方 rar 二進制檔
# 壓縮
rar a archive.rar dir/ # a=add 新增檔案
# 解壓縮
rar x archive.rar # x=extract 保留路徑
unrar x archive.rar # unrar 同樣支援 x 指令
# 列出內容
rar l archive.rar
unrar l archive.rar
💡 修正原文錯誤:原文「rar a」為壓縮、「rar e」為解壓,實際上 rar a 是新增(壓縮),rar x 或 unrar x 才是解壓並保留目錄結構。
# 解壓縮並自動偵測格式(需安裝 atool 或 dtrx)
dtrx archive.xxx
# 並行壓縮加速(多核心)
tar cf - dir/ | pigz -9 > dir.tar.gz # pigz = 並行 gzip
tar cf - dir/ | pbzip2 -9 > dir.tar.bz2 # pbzip2 = 並行 bzip2
# 分割大檔案傳輸
tar czvf - large_dir/ | split -b 100M - large.tar.gz.part
# 合併還原
cat large.tar.gz.part* | tar zxvf -