當磁碟空間不足,要查空間被誰用掉是使用電腦的日常,最早我用過 DiskInfo 跟 Folder Size For Windows,後來的新歡變成 WinDirStat,今天來談另一種選擇 - 如何用命令列工具完成。

有用 Linux 的同學對 df、du 指令應該不會陌生:

df 用來看剩餘空間,du 則是 Disk Usage 用來統計各資料夾使用量,預設會深入每一層子目錄,數量多到眼花,抓戰犯都常先看上面幾層,找出用量大且不合理的再深入,-d n 參數可指定深入層數,-BK、-BM 則可指定用 KB 或 MB 為單位。

回到 Windows,或許不知道,只要你有裝 Git for Windows,其實你也可以在 Windows 用 df 跟 du:

同場加映,Git for Windows 還內建另一個好工具 - openssl)

除了靠 GNU Coreutils 在 Windows 使用 du,SysInternals 神奇工具包也有個同名的 Disk Usage, du 工具,功用跟 GNU Coreutils du 差不多,但參數略有不同。

比較 GNU Coreutils 跟 SysInternals du 的查詢數字有點出入,比對檔案總管查詢結果,GNU Coreutils du 的 9592K 來自佔用磁碟大小 9,822,208/1024 = 9592K,SysInternals du 則是以檔案大小 9,525,473 為主。

SysInternals du 有個強項是可輸出 CSV 格式做後續應用,例如:CSV 存檔用 Excel 分析製作圖表:

或是用串接 PowerShell 篩選、排序加工,像我用以下指令接入 CSV 解析後大到小排序,最後印出路徑跟大小,一氣喝成。而這個概念也很適合轉成排程或批次作業,衍生出有趣的應用。

C:\tools\SysInternals\du -l 1 -c -nobanner | ConvertFrom-Csv |
Sort-Object -Property DirectorySize -Descending |
Select-Object Path, DirectorySize

【小結】

單純想抓磁碟空間被哪些檔案吃光,使用 WinDirStat 之類的 GUI 還是比較方便,但如果有統計使用量、製作報表需求,則善用 SysInternals du 的 CSV 輸出格式讓你事半功倍。


Comments

Be the first to post a comment

Post a comment