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

时间:2009-04-28 13:50:07

标签: powershell

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

6 个答案:

答案 0 :(得分:39)

试试这个脚本

Get-ChildItem -re -in * |
  ?{ -not $_.PSIsContainer } |
  sort Length -descending |
  select -first 10

故障:

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

答案 1 :(得分:34)

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

gci . -r | sort Length -desc | select fullname -f 10

答案 2 :(得分:3)

我想blogged about a similar problem我想找到目录中最大的文件和所有子目录(例如整个C:驱动器),以及以简单易懂的格式列出它们的大小(GB,MB和KB)。这是我使用的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

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

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

答案 3 :(得分:0)

如果你关心结果集的一些格式化,这里有两个具有更好看的输出的函数:

#Function to get the largest N files on a specific computer's drive
Function Get-LargestFilesOnDrive
{
Param([String]$ComputerName = $env:COMPUTERNAME,[Char]$Drive = 'C', [Int]$Top = 10)
Get-ChildItem -Path \\$ComputerName\$Drive$ -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName,  Length | Sort-Object Length -Descending  | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap    
}

#Function to get the largest N files on a specific UNC path and its sub-paths
Function Get-LargestFilesOnPath
{
    Param([String]$Path = '.\', [Int]$Top = 10)
    Get-ChildItem -Path $Path -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName,  Length | Sort-Object Length -Descending  | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap
}

答案 4 :(得分:0)

这是我知道的最快的方法:

$folder  = "$env:windir" # forder to be scanned
$minSize = 1MB

$stopwatch =  [diagnostics.stopwatch]::StartNew()

$ErrorActionPreference = "silentlyContinue"
$list = New-Object 'Collections.ArrayList'
$files = &robocopy /l "$folder" /s \\localhost\C$\nul /bytes /njh /njs /np /nc /fp /ndl /min:$minSize
foreach($file in $files) {
    $data = $file.split("`t")
    $null = $list.add([tuple]::create([uint64]$data[3], $data[4]))
}

$list.sort() # sort by size ascending
$result = $list.GetRange($list.count-10,10) 
$result | select item2, item1 | sort item1 -Descending

$stopwatch.Stop()
$t = $stopwatch.Elapsed.TotalSeconds
"done in $t sec."

答案 5 :(得分:-1)

将前十大文件放入本地目录的基本文件是使用h来表示人类可读的S排序文件:

ls -Sh -l |head -n 10

或者您可以使用

du -ha /home/directory |sort -n -r |head -n 10