首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >du in PowerShell?

du in PowerShell?
EN

Stack Overflow用户
提问于 2009-05-15 12:00:10
回答 5查看 40.6K关注 0票数 35

如何使用PowerShell获取du-ish分析?我想定期检查我的磁盘上目录的大小。

下面给出了当前目录中每个文件的大小:

代码语言:javascript
复制
foreach ($o in gci)
{
   Write-output $o.Length
}

但我真正想要的是目录中所有文件的总大小,包括子目录。此外,我希望能够按大小排序,可选。

EN

回答 5

Stack Overflow用户

发布于 2012-10-11 00:23:53

我稍微修改了答案中的命令,按大小降序排序,并包含以MB为单位的大小:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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

也许这不是最有效的方法,但它是有效的。

票数 27
EN

Stack Overflow用户

发布于 2016-02-12 23:19:13

代码语言:javascript
复制
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上的所有文件分组,然后遍历每个目录的构建总数列表(以包括子目录)。

票数 4
EN

Stack Overflow用户

发布于 2020-07-03 06:17:19

基于之前的答案,这将适用于那些希望以KB、MB、GB等为单位显示大小,并仍然能够按大小排序的人。要更改单位,只需将"Name=“和"Expression=”中的"MB“更改为所需的单位。您还可以通过更改"2“来更改要显示的小数位数(四舍五入)。

代码语言:javascript
复制
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
    }
}

这给出的大小是一个数字,而不是一个字符串(如另一个答案所示),因此可以按大小排序。例如:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/868264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档