開發者磁碟清理
Cargo 快取和 target 資料夾有什麼不同?Rust 開發者該刪哪個
了解 Rust 專案 target 建置成果與 Cargo 相依套件快取的差異、哪些可以安全刪除,以及 .cargo 裡哪些內容不該當成快取清理

需要騰出磁碟空間時,通常應該先清理已經不再使用的專案 target 資料夾。這裡存放的是個別 Rust workspace 的建置成果,之後重新編譯就能產生。只有在 Cargo 共用快取確實很大、內容損壞,或近期不需要離線開發時,才考慮清理相依套件快取;清掉之後,Cargo 必須重新下載或解壓縮套件。
不要直接刪除整個 .cargo 資料夾。裡面還可能有 Cargo 設定、registry 認證資料,以及透過 cargo install 安裝的命令列工具,這些都不是一般快取。
本文路徑與指令已於 2026 年 8 月 12 日在 macOS 15.7.7、Cargo 1.84.0、rustc 1.84.0 上驗證。Cargo 可以自訂 Home 與建置資料夾,刪除前請先確認自己電腦上的實際路徑。
先講結論:先清 target,再考慮 Cargo 快取
Cargo 會保存兩種性質不同、但都能重新產生的資料:
- workspace 裡的
target資料夾,存放該專案的編譯成果; - Cargo Home(通常是
~/.cargo),存放共用下載、解壓縮後的套件原始碼、Git 相依套件、設定、認證資料與已安裝工具。
兩者的復原成本不同。刪除 target 主要會增加重新編譯的時間;刪除相依套件快取,除了重新編譯,還可能需要網路。因此對多數開發者來說,舊專案的 target 是更合理的第一個清理目標。
| 路徑 | 內容 | 可以刪除嗎? | 刪除後的影響 |
|---|---|---|---|
project/target | Debug、Release、增量編譯、文件與不同目標平台的建置成果 | 可以,先停止建置 | 專案需要重新編譯 |
~/.cargo/registry/cache | 已下載的 crate 壓縮檔 | 通常可以,但要確定能連網 | Cargo 會重新下載缺少的 crate |
~/.cargo/registry/src | 從 registry 解壓縮出的套件原始碼 | 通常可以,但要確定能連網 | Cargo 會重新解壓縮或下載 |
~/.cargo/git/db 與 git/checkouts | Git 相依套件的 repository 與 checkout | 通常可以,但要確定能連網 | Cargo 會重新抓取與 checkout |
~/.cargo/bin | 透過 cargo install 安裝的工具 | 不可當成快取刪除 | 已安裝的指令會消失 |
config.toml 與 credentials.toml | Cargo 設定與 registry 認證資料 | 不可以 | 建置、registry、Proxy 或登入可能失效 |
Cargo.toml、Cargo.lock、src | 專案定義、相依版本鎖定與原始碼 | 不可以 | 會直接破壞專案 |
Windows 的預設 Cargo Home 通常位於 %USERPROFILE%\.cargo。如果有設定 CARGO_HOME,不論使用哪個作業系統,都應以該環境變數指向的位置為準。
target 資料夾為什麼會變得這麼大?
Cargo 預設把建置輸出寫進 workspace 的 target 資料夾。Debug 與 Release profile 使用不同的子資料夾;加入其他編譯目標後,各個 target triple 也會保存自己的成果。增量編譯還會保留中間資料,讓後續建置更快。
如果同一個 workspace 會建置桌面程式、WebAssembly、多種架構或多組 feature,累積容量遠大於原始碼並不意外。Cargo 官方把這些內容視為可重新產生的建置資料,但刪除仍有代價:下一次建置會從沒有快取的狀態開始。
撰寫本文時,MangoDisk repository 的 target 佔了 27 GB。同一台 Mac 的 Cargo registry 壓縮檔快取為 189 MB、解壓縮後的原始碼為 1.9 GB,Cargo Git 資料庫則是 17 MB。這只是這台電腦的實測結果,不代表每個人都能釋放相同空間;重點是應該先量測,而不是預設全域快取一定最大。
清理前先確認實際路徑與容量
在 macOS 或 Linux 的 Rust workspace 中,可以先執行這些唯讀指令:
cargo_home="${CARGO_HOME:-$HOME/.cargo}"
du -sh target 2>/dev/null
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
"$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null
Cargo 也可能使用自訂的 target 資料夾。下列指令會輸出 workspace metadata,其中包含實際的 target_directory:
cargo metadata --no-deps --format-version 1
在 PowerShell 中,可以分別檢查目前專案與預設 Cargo Home:
$CargoHome = if ($env:CARGO_HOME) { $env:CARGO_HOME } else { Join-Path $HOME ".cargo" }
Get-ChildItem .\target -Recurse -File -Force -ErrorAction SilentlyContinue |
Measure-Object Length -Sum
Get-ChildItem "$CargoHome\registry\cache" -Recurse -File -Force -ErrorAction SilentlyContinue |
Measure-Object Length -Sum
PowerShell 會以位元組回報結果。更重要的是,這些檢查會讓你在刪除前再次確認正確位置。
如何安全清理專案 target 資料夾
先停止 cargo build、測試、正在編譯的 rust-analyzer 工作,以及從該 workspace 啟動的程式。接著預覽 Cargo 準備移除的內容:
cargo clean --dry-run -v
確認範圍正確後,清理目前 workspace 的完整 target 資料夾:
cargo clean
如果想保留仍有用的建置資料,可以縮小範圍:
# 只移除 Release profile 的建置成果
cargo clean --release
# 只移除產生的文件
cargo clean --doc
# 只移除 workspace 中某個 package 的建置成果
cargo clean -p your-package-name
cargo clean 會遵循 Cargo 設定的 target 位置。對使用自訂 target-dir 的 workspace 而言,這比直接假設資料夾一定是 ./target 更穩妥。
清理後資料夾再次出現很正常。下一次建置會重新建立它;因為增量編譯資料已經移除,第一次完整編譯通常會慢不少。
什麼時候才需要清理 Cargo 共用快取?
以下情況可以考慮清理:
- 實際量測後,快取容量確實大到值得處理;
- 下載的壓縮檔或 Git 相依套件已損壞;
- 舊 toolchain 與專案留下近期不會再用的套件;
- 現在必須騰出空間,而且之後有穩定網路能夠復原。
搭飛機前、需要離線工作,或公司內部 registry 可能暫時無法連線時,不建議清理。也要先確認團隊是否使用自訂 registry、vendored dependencies 或非預設的 CARGO_HOME。
Cargo Home 官方文件把 registry 與 Git 相關內容視為可以透過重新解壓縮、checkout 或下載復原的快取。若決定手動刪除,請先結束 Cargo 相關程序,設定正確的 Cargo Home,並做最後一次檢查:
cargo_home="${CARGO_HOME:-$HOME/.cargo}"
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
"$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null
接著只刪除自己明確選定的快取子資料夾:
rm -rf "$cargo_home/registry/cache" "$cargo_home/registry/src" \
"$cargo_home/git/db" "$cargo_home/git/checkouts"
這個指令不會經過垃圾桶,絕對不要把它簡化成 rm -rf ~/.cargo。完成後,下一次連網建置可能需要重新下載並解壓縮相依套件。
Windows 使用者可以透過檔案總管,檢查並刪除 %CARGO_HOME% 或 %USERPROFILE%\.cargo 下對應的快取子資料夾。用圖形介面逐項確認,比較不容易把 bin、設定或認證檔案一起選進去。
哪些內容不能當作 Cargo 快取清理?
不要把以下內容列為清理目標:
.cargo/bin:這裡存放cargo-audit、cargo-edit等已安裝指令;.cargo/credentials.toml:這裡可能存放 registry 登入 token;.cargo/config.toml:這裡可能定義 registry、alias、網路設定與編譯目標行為;- 專案裡的
Cargo.toml、Cargo.lock、build.rs或src; - vendored dependencies 或團隊維護的離線 mirror,除非負責人已有復原計畫。
如果不確定某個資料夾是否只是快取,就停在檢查步驟。位於 .cargo 底下,不代表它可以隨意刪除。
使用 MangoDisk 檢查 Rust 建置成果
MangoDisk 深度清理可以辨識 Rust 專案的 target 資料夾,以及各平台對應的 Cargo 快取位置。規則不會把整個 .cargo 當成清理目標,專案建置成果也不會預設勾選。
掃描會在本機完成。你可以先查看路徑與實際容量,再決定是否刪除;當多個 workspace 都有自己的 target 時特別實用。完整的確認與清理記錄流程可參考 MangoDisk 安全指南。
常見問題
Rust 專案的 target 資料夾可以安全刪除嗎?
可以,前提是它確實是 Cargo 設定的建置輸出位置,而且目前沒有建置工作。裡面是可重新產生的成果,不是專案原始碼;刪除後要預期第一次完整編譯會比較久。
cargo clean 會清掉 Cargo 的下載快取嗎?
不會。cargo clean 移除的是 target 資料夾中的建置成果,不會清空 Cargo Home 裡的 registry 或 Git 相依套件快取。
可以刪除 Cargo.lock 來省空間或修復相依套件嗎?
不可以。Cargo.lock 很小,用來記錄已解析的相依套件版本。刪除它不是磁碟清理,還可能讓 Cargo 選到不同版本。
為什麼 Cargo 快取和 target 又出現了?
這是正常現象。專案建置時,Cargo 會重新產生建置成果並復原缺少的相依資料。清理只會移除舊的可再生資料,不會停用快取機制。
資料來源與延伸閱讀
- Cargo Book:Build Cache
- Cargo Book:cargo clean
- Cargo Book:Cargo Home
- 如何安全刪除 Xcode Derived Data
- 我為什麼開發 MangoDisk
想先看清楚 Rust 建置成果與 Cargo 快取,再決定要不要刪除?可以下載 MangoDisk,直接在本機檢查掃描結果。