tar — 建立與解壓縮封存檔

將檔案打包為 .tar 封存檔,並支援 gzip/bzip2/xz 壓縮與解壓縮。

語法

tar [選項] [封存檔] [檔案或目錄...]

常用選項

選項 說明 範例
-c, --create 建立新的封存檔 tar -cf archive.tar files/
-x, --extract 解壓縮封存檔 tar -xf archive.tar
-t, --list 列出封存檔內容(不解壓縮) tar -tf archive.tar
-v, --verbose 顯示正在處理的每個檔案 tar -cvf archive.tar files/
-f 封存檔 指定封存檔名稱(幾乎必用) tar -cf output.tar dir/
-z, --gzip 使用 gzip 壓縮(.tar.gz 或 .tgz) tar -czf archive.tar.gz dir/
-j, --bzip2 使用 bzip2 壓縮(.tar.bz2) tar -cjf archive.tar.bz2 dir/
-J, --xz 使用 xz 壓縮(.tar.xz,壓縮率最高) tar -cJf archive.tar.xz dir/
-C 目錄 解壓縮到指定目錄 tar -xf archive.tar -C /opt/
--strip-components=N 解壓縮時去除前 N 層目錄路徑 tar -xf archive.tar --strip-components=1
-p 保留原始檔案權限 tar -cpzf backup.tar.gz /etc/
--exclude=樣式 排除符合樣式的檔案 tar -czf backup.tar.gz --exclude="*.log" dir/

使用範例

範例 1:打包並壓縮目錄(.tar.gz)

czf = create + gzip + file,建立 gzip 壓縮封存檔,最常用的格式。

$ tar -czf project-backup.tar.gz ./project/
範例 2:解壓縮 .tar.gz 到當前目錄

xzf = extract + gzip + file,解壓縮到當前目錄。

$ tar -xzf project-backup.tar.gz
範例 3:解壓縮到指定目錄

使用 -C 指定解壓縮目的地目錄(目錄必須先存在)。

$ tar -xzf archive.tar.gz -C /opt/myapp/
範例 4:查看封存檔內容(不解壓)

使用 -t 列出封存檔中的所有檔案,方便確認內容再決定是否解壓。

$ tar -tzf project-backup.tar.gz
project/
project/README.md
project/src/main.py
project/src/utils.py
範例 5:打包並顯示進度

加上 -v 顯示正在打包的每個檔案,適合打包大量檔案時確認進度。

$ tar -czvf website.tar.gz ./html/
html/
html/index.php
html/assets/css/style.css
html/assets/js/main.js
範例 6:備份時排除特定目錄

使用 --exclude 排除 node_modules 等不需要備份的大型目錄。

$ tar -czf backup.tar.gz ./project/ --exclude="./project/node_modules" --exclude="*.log"
範例 7:使用 xz 壓縮(最高壓縮率)

xz 壓縮率優於 gzip 但速度較慢,適合長期備份儲存。

$ tar -cJf archive.tar.xz ./data/
記憶法:z = gzip,j = bzip2,J = xz。壓縮率 xz > bzip2 > gzip;速度相反。

常見錯誤與排錯

tar: This does not look like a tar archive
原因
封存檔格式不符、檔案損壞,或使用了錯誤的壓縮選項(如用 -z 解壓 .bz2)。
解法
現代版 tar 支援自動偵測格式,可省略 -z/-j/-J,直接用 tar -xf filename。
tar: Cannot open: No such file or directory
原因
指定的封存檔不存在。
解法
確認檔案名稱與路徑是否正確。
tar: Removing leading '/' from member names
原因
打包絕對路徑時,tar 會自動移除開頭的 /,避免解壓時覆蓋系統檔案。
解法
這是安全行為,無需處理。解壓時會在當前目錄建立相對路徑的目錄結構。

延伸閱讀