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 會自動移除開頭的 /,避免解壓時覆蓋系統檔案。
- 解法
- 這是安全行為,無需處理。解壓時會在當前目錄建立相對路徑的目錄結構。