我想查看資料夾中子資料夾的大小,類似於 linuxdu -sh
命令。如何在命令提示字元中列出目錄及其大小?
答案1
嘗試一下磁碟使用情況來自 Sysinternals 的實用程式。具體來說,du -l 1
應該顯示目前目錄的每個子目錄的大小。有關更多信息,請du
在不帶任何參數的情況下運行。
如果 PowerShell 正常,請嘗試以下操作:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
大小以位元組為單位。若要將它們格式化為更大的單位(例如 MB),請嘗試以下操作(壓縮為一行):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
有關更多信息,請參閱這篇文章來自 Technet。
如果您想要更靈活的大小格式(根據實際大小選擇 kB/MB/GB/等),請參閱這個問題及其答案。
我認為不可能從常規命令列僅使用幾個簡單的命令來完成您想要的操作。看以這個腳本為例(不打算在此處複製它,因為我認為這種方法不值得採用,除非 PowerShell 不可用且第三方實用程式不可接受)。
答案2
我沒有du
Linux 的經驗。但在 Windows 中,我習慣dir /s
列出所有資料夾和子資料夾以及檔案大小。
答案3
這是對安德烈克的回答。我添加了以下內容:
- 使其遞歸地進一步進入子目錄
- 添加了大小閾值以忽略較小的目錄
- 將目錄名稱替換為目前目錄的相對路徑
- 按路徑對結果進行排序(當它們已經按大小過濾時,我發現它比按大小排序更方便)
- 添加了一些格式以使結果更具可讀性
因此,設定$minsizeMB
和$maxdepth
為所需的值並運行腳本。
$minsizeMB = 100;
$maxdepth = 5;
Get-ChildItem -depth $maxdepth -Recurse |
Where-Object { $_.PSIsContainer } |
Select-Object FullName |
Sort-Object FullName |
ForEach-Object {
$directory = Get-Item $_.FullName;
$path = Resolve-Path -Relative $directory.FullName ;
$size = ((Get-ChildItem $directory -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) ;
if ($size -ge $minsizeMB) { "{0,-90}: {1:N2} MB" -f ($path, $size) }
}