硬碟滿了,「關於本機」告訴你用了幾百 GB,但不會告訴你這幾百 GB 躺在哪裡。要嘛買套付費工具,要嘛打開終端機下 du,等它慢慢爬完整棵目錄樹。
DiskAnalyzer 是一套原生 SwiftUI 打造的 macOS 磁碟空間分析工具,掃描完直接用 Sunburst 和 Treemap 畫出來,哪個資料夾佔最多空間,一眼就看得到。
長什麼樣子
首頁列出所有掛載的磁碟,每張卡片一個使用率圓環。點下去就開始掃,掃描中會即時顯示目前掃到第幾個資料夾、幾個檔案、耗了多久,隨時可以取消。
掃描本身是唯讀的 stat(2) 遞迴,不會更動任何檔案。掃完之後左邊是資料夾樹,右邊分成八個分頁,同一份掃描結果換著看:
八個分頁
Sunburst
180 度半環由內而外展開,愈外圈代表愈深層的子資料夾,環佔的角度就是它在上層裡的比例。中心的膠囊顯示目前選取節點的總量,點色塊可以一路下鑽到很深的資料夾,點中心點則退回上層。
Treemap
用面積表示占比,色塊愈大代表資料夾愈肥。排版是自己刻的 squarified treemap 演算法,盡量讓每個色塊接近正方形,不會出現又細又長、滑鼠很難點中的長條。點色塊一樣能下鑽。
圓餅
傳統的甜甜圈圖,看整體占比最直覺。圖是用 Canvas 手畫的,不靠現成圖表套件,右側圖例點下去一樣會下鑽。
長條
拿 Swift Charts 直接畫水平長條,適合比較幾個資料夾誰大誰小,順便看到實際的數字座標軸,比圓餅更適合排名式的比較。
明細
類似 Finder 的清單檢視,但多了一欄「% 父層」——這個項目占上層資料夾多少比例,不用心算就看得到。占比超過 20% 的列會用淡淡的紅底標出來提醒,點欄名可以切換排序。
搜尋
名稱(支援萬用字元)、大小範圍、日期範圍、副檔名、擁有者、屬性,條件可以疊加著用,不用先下鑽到某個資料夾才能找東西,整顆磁碟都在搜尋範圍內。
報告
九種報告卡片一字排開:最大檔案、類型統計、重複檔案、最舊檔案、暫存檔、空資料夾、擁有者統計、年齡分布、大小分布,點哪張看哪種清單。重複檔案這張比較費工——偵測分三階段,先依大小分群,再抓每個檔案前 4KB 算 quick hash,最後才對還沒排除的候選做完整雜湊,真正要讀整個檔案內容的只剩一小撮。
快照
把某次掃描結果存起來,之後選兩個快照比較,看出哪些檔案是新增、刪除,或只是變大了——變大用紅色標,變小用綠色標。存檔用 zlib 壓縮過,一份完整的目錄樹通常壓得下去。
匯出
分頁之外,掃描結果隨時能匯出成 CSV、JSON、HTML、TXT、XLSX 五種格式,全部自行實作,包含 XLSX——用 store-only 的 ZIP 格式加上最陽春的 spreadsheet XML 組出來,不依賴任何外部套件。