如何在目录结构中找到10个最大的文件

Ral*_*ton 31 powershell

如何在目录结构中找到10个最大的文件?

Jar*_*Par 44

试试这个脚本

Get-ChildItem -re -in * |
  ?{ -not $_.PSIsContainer } |
  sort Length -descending |
  select -first 10
Run Code Online (Sandbox Code Playgroud)

分解:

过滤块" ?{ -not $_.PSIsContainer }"用于过滤掉目录.sort命令将按大小按降序对所有剩余条目进行排序.select子句只允许前10个通过,因此它将是最大的10个.

  • ?{}语法是where-object的缩写,where-object是一个过滤表达式.从本质上讲,powershell会将每个对象传递给$ _中的?{}子句.如果返回值为$ true,则对象将继续沿管道向下移动,否则将被过滤掉. (2认同)

Kei*_*ill 35

这可以简化一点,因为目录没有长度:

gci . -r | sort Length -desc | select fullname -f 10
Run Code Online (Sandbox Code Playgroud)

  • 再加上'.' 甚至不需要.由于默认路径是当前目录,因此可以将前部简化为"gci -r | ...". (3认同)

dea*_*dog 5

我在博客上写过一个类似的问题,我想在一个目录和所有子目录(例如整个 C: 驱动器)中找到最大的文件,并以一种易于理解的格式(GB、MB、和知识库)。这是我使用的 PowerShell 函数,它在一个漂亮的 Out-GridView 中列出了按大小排序的所有文件:

Get-ChildItem -Path 'C:\somefolder' -Recurse -Force -File |
    Select-Object -Property FullName `
        ,@{Name='SizeGB';Expression={$_.Length / 1GB}} `
        ,@{Name='SizeMB';Expression={$_.Length / 1MB}} `
        ,@{Name='SizeKB';Expression={$_.Length / 1KB}} |
    Sort-Object { $_.SizeKB } -Descending |
    Out-GridView
Run Code Online (Sandbox Code Playgroud)

输出到 PowerShell GridView 很好,因为它允许您轻松过滤结果并滚动浏览它们。这是速度更快的 PowerShell v3 版本,但博客文章还显示了一个较慢的 PowerShell v2 兼容版本。

当然,如果您只想要前 10 个最大的文件,您可以-First 10向 Select-Object 调用添加一个参数。