目前的瀏覽器版本過舊

MangoDisk 網站需要較新的瀏覽器才能正確顯示。請升級 Microsoft Edge,或使用其他現代瀏覽器開啟。

你仍然可以直接下載 MangoDisk:

升級 Microsoft Edge

開發者磁碟清理

Cargo 快取和 target 資料夾有什麼不同?Rust 開發者該刪哪個

了解 Rust 專案 target 建置成果與 Cargo 相依套件快取的差異、哪些可以安全刪除,以及 .cargo 裡哪些內容不該當成快取清理

發布於 2026/08/12更新於 2026/09/16作者: Harry
將 Rust 相依套件與專案建置成果分開檢查後再安全清理

需要騰出磁碟空間時,通常應該先清理已經不再使用的專案 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/targetDebug、Release、增量編譯、文件與不同目標平台的建置成果可以,先停止建置專案需要重新編譯
~/.cargo/registry/cache已下載的 crate 壓縮檔通常可以,但要確定能連網Cargo 會重新下載缺少的 crate
~/.cargo/registry/src從 registry 解壓縮出的套件原始碼通常可以,但要確定能連網Cargo 會重新解壓縮或下載
~/.cargo/git/db 與 git/checkoutsGit 相依套件的 repository 與 checkout通常可以,但要確定能連網Cargo 會重新抓取與 checkout
~/.cargo/bin透過 cargo install 安裝的工具不可當成快取刪除已安裝的指令會消失
config.toml 與 credentials.tomlCargo 設定與 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 會重新產生建置成果並復原缺少的相依資料。清理只會移除舊的可再生資料,不會停用快取機制。

資料來源與延伸閱讀

想先看清楚 Rust 建置成果與 Cargo 快取,再決定要不要刪除?可以下載 MangoDisk,直接在本機檢查掃描結果。

如果你也用 Codex 做專案,工作目錄裡可能還留著好幾份套件和建置檔案。這篇 Codex 空間清理指南說明如何先找出大資料夾,再整理支援清理的檔案,保留程式碼與對話紀錄。

也有使用 Node.js?可以看看npm 下載快取怎麼清,它和各個專案的相依套件需要分開處理。