如何使用PowerShell获取du-ish分析?我想定期检查我的磁盘上目录的大小。
下面给出了当前目录中每个文件的大小:
foreach ($o in gci)
{
Write-output $o.Length
}
但我真正想要的是目录中所有文件的总大小,包括子目录。此外,我希望能够按大小排序,可选。
发布于 2012-10-10 16:23:53
我稍微修改了答案中的命令,按大小降序排序,并包含以MB为单位的大小:
gci . |
%{$f=$_; gci -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name"; Expression={$f}},
@{Name="Sum (MB)";
Expression={"{0:N3}" -f ($_.sum / 1MB) }}, Sum } |
sort Sum -desc |
format-table -Property Name,"Sum (MB)", Sum -autosize
输出:
PS C:\scripts> du
Name Sum (MB) Sum
---- -------- ---
results 101.297 106217913
SysinternalsSuite 56.081 58805079
ALUC 25.473 26710018
dir 11.812 12385690
dir2 3.168 3322298
也许这不是最有效的方法,但它是有效的。
发布于 2016-02-12 15:19:13
function Get-DiskUsage ([string]$path=".") {
$groupedList = Get-ChildItem -Recurse -File $path | Group-Object directoryName | select name,@{name='length'; expression={($_.group | Measure-Object -sum length).sum } }
foreach ($dn in $groupedList) {
New-Object psobject -Property @{ directoryName=$dn.name; length=($groupedList | where { $_.name -like "$($dn.name)*" } | Measure-Object -Sum length).sum }
}
}
我的略有不同;我将directoryname上的所有文件分组,然后遍历每个目录的构建总数列表(以包括子目录)。
发布于 2020-07-02 22:17:19
基于之前的答案,这将适用于那些希望以KB、MB、GB等为单位显示大小,并仍然能够按大小排序的人。要更改单位,只需将"Name=“和"Expression=”中的"MB“更改为所需的单位。您还可以通过更改"2“来更改要显示的小数位数(四舍五入)。
function du($path=".") {
Get-ChildItem $path |
ForEach-Object {
$file = $_
Get-ChildItem -File -Recurse $_.FullName | Measure-Object -Property length -Sum |
Select-Object -Property @{Name="Name";Expression={$file}},
@{Name="Size(MB)";Expression={[math]::round(($_.Sum / 1MB),2)}} # round 2 decimal places
}
}
这给出的大小是一个数字,而不是一个字符串(如另一个答案所示),因此可以按大小排序。例如:
PS C:\Users\merce> du | Sort-Object -Property "Size(MB)" -Descending
Name Size(MB)
---- --------
OneDrive 30944.04
Downloads 401.7
Desktop 335.07
.vscode 301.02
Intel 6.62
Pictures 6.36
Music 0.06
Favorites 0.02
.ssh 0.01
Searches 0
Links 0
https://stackoverflow.com/questions/868264
复制相似问题