在 Linux 中,可以用 tar 從 .tar.gz(或 .tgz)檔案中只解壓特定目錄,不必整包解壓。以下依「最實務、最常用」方式說明。
一、先查看 tar.gz 內有哪些目錄(非常重要)
在解壓前,建議先確認「實際路徑名稱」:
tar -tzf archive.tar.gz
或只看前幾行:
tar -tzf archive.tar.gz | head
你會看到類似:
project/
project/config/
project/config/app.yml
project/src/
project/src/main.py
project/docs/
⚠️ 注意:tar 裡的路徑通常包含最外層目錄(例如 project/)
二、解壓「特定目錄」的基本語法
tar -xzf archive.tar.gz 路徑/目錄
範例:只解壓 project/config/
tar -xzf archive.tar.gz project/config/
結果會建立:
./project/config/
三、解壓多個指定目錄
tar -xzf archive.tar.gz project/config/ project/docs/
四、只解壓特定目錄到「指定目的地」
使用 -C(change directory):
tar -xzf archive.tar.gz project/config/ -C /opt/app/
➡️ 結果:
/opt/app/project/config/
五、移除最外層目錄(常見需求)
若你 不想要 project/ 這一層,可用 --strip-components:
範例
tar -xzf archive.tar.gz project/config/ \
--strip-components=1
結果會是:
./config/
搭配 -C
tar -xzf archive.tar.gz project/config/ \
--strip-components=1 \
-C /opt/app/
➡️ /opt/app/config/
六、使用萬用字元(wildcard)解壓子目錄
解壓所有 config 目錄
tar -xzf archive.tar.gz */config/
解壓所有 .yml 設定檔
tar -xzf archive.tar.gz --wildcards '*/config/*.yml'
⚠️ 使用萬用字元時,務必加上 --wildcards
七、實務常見錯誤與排查
❌ 錯誤:檔案不存在
tar: project/config: Not found in archive
✔ 解法:先用
tar -tzf archive.tar.gz | grep config
❌ 解壓結果「什麼都沒有」
常見原因:
- 目錄名稱拼錯
- 少了最外層目錄(例如實際是
project/config/,卻打config/)
八、快速對照表
| 需求 | 指令 |
|---|---|
| 查看內容 | tar -tzf file.tar.gz |
| 解壓指定目錄 | tar -xzf file.tar.gz dir/ |
| 解壓到指定路徑 | tar -xzf file.tar.gz dir/ -C /path |
| 移除外層目錄 | --strip-components=1 |
| 使用萬用字元 | --wildcards |
留言