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

问题描述 投票:0回答:7

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

powershell
7个回答
59
投票

尝试这个脚本

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

细分:

过滤器块“

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


42
投票

这可以稍微简化,因为目录没有长度:

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

10
投票

我在博客中提到了类似的问题,我想找到目录和所有子目录中最大的文件(例如整个 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
输出到 PowerShell GridView 很好,因为它允许您轻松过滤结果并滚动它们。这是速度更快的 PowerShell v3 版本,但博客文章还显示了速度较慢的 PowerShell v2 兼容版本。

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

-First 10

 参数。


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

#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 }
    

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."
    

0
投票
要查找目录结构中最大的 10 个文件并以 GB 为单位显示其大小,您可以使用以下 PowerShell 命令:

Get-ChildItem -Path 'C:' -Recurse -File | 排序对象属性 长度-降序| 选择对象-前 10 个-属性名称, @{名称='大小(GB)';表达式={[数学]::Round($_.Length/1GB,3)}}

此命令将:

使用 Get-ChildItem 递归搜索“C:”目录中的所有文件。 使用 Sort-Object 按文件长度降序对文件进行排序。 使用 Select-Object 选择前 10 个文件。 使用计算属性显示文件名和文件大小(以 GB 为单位),四舍五入到小数点后 3 位。

输出将类似于此:

Name Size (GB) ---- --------- MRT.exe 0.200 COMPONENTS 0.189 MRT-KB890830.exe 0.133 catdb 0.121 SOFTWARE 0.116 SOFTWARE 0.116 Security.evtx 0.105 System.evtx 0.049 WindowsCodecsRaw.dll 0.033 OBJECTS.DATA 0.030
此命令可用于快速识别 Windows 系统上消耗磁盘空间的最大文件。


-3
投票
将前 10 个最大文件放入本地目录的基本方法是使用 h 进行人类可读,S 按大小对文件进行排序:

ls -Sh -l |head -n 10

或者你可以使用

du -ha /home/directory |sort -n -r |head -n 10
    
© www.soinside.com 2019 - 2024. All rights reserved.