如何找到目录结构中最大的 10 个文件?
尝试这个脚本
Get-ChildItem -re -in * |
?{ -not $_.PSIsContainer } |
sort Length -descending |
select -first 10
细分:
过滤器块“
?{ -not $_.PSIsContainer }
”用于过滤目录。 sort 命令将按大小降序对所有剩余条目进行排序。 select 子句只允许前 10 个通过,因此它将是最大的 10 个。
这可以稍微简化,因为目录没有长度:
gci . -r | sort Length -desc | select fullname -f 10
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
参数。
#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
}
$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."
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 系统上消耗磁盘空间的最大文件。
ls -Sh -l |head -n 10
或者你可以使用
du -ha /home/directory |sort -n -r |head -n 10