I would like to see sizes of subfolders in a folder, similar to linux du -sh command. How can I list directories and their sizes in command prompt?
- 89,072
- 65
- 269
- 311
- 1,149
3 Answers
Try the Disk Usage utility from Sysinternals. Specifically, du -l 1 should show the size of each subdirectory of the current directory. For more information, run du without any parameters.
If PowerShell is OK, then try the following:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
The sizes are in bytes. To format them in some larger unit like MB, try the following (condensed to one line):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
For more information, see this article at Technet.
If you want more flexible formatting of the sizes (choosing kB/MB/GB/etc based on the actual size), see this question and its answers.
I don't think it's possible to do what you want from the regular command line and with only a few simple commands. See this script as an example (not going to copy it here because I don't believe that approach is worth pursuing, unless PowerShell isn't available and third-party utilities aren't acceptable).
This is a modification to Indrek's answer. I added the followings:
- made it recursive to go further in subdirectories
- added a size threshold to omit samller directories
- replaced directory names with their relative path from current directory
- sorted results by their path (I found it more convinient rather than sorting them by size, when they are already filtered by size)
- added some formatting to make the results more readable
So, set $minsizeMB and $maxdepth with the desired values and run the script.
$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) }
}
- 85
I have no experience with du in Linux. But in windows I use dir /s to list all folders and subfolders along with file sizes.
- 4,866