Как найти 10 самых больших файлов в структуре каталогов?
Как найти 10 самых больших файлов в структуре каталогов
Ответ 1
Попробуйте script
gci -re -in * |
?{ -not $_.PSIsContainer } |
sort Length -descending |
select -first 10
Структура:
Блок фильтра "?{ -not $_.PSIsContainer }
" предназначен для фильтрации каталогов. Команда sort будет сортировать все остальные записи по размеру в порядке убывания. Предложение select разрешает только первые 10, поэтому оно будет самым большим 10.
Ответ 2
Это можно упростить, потому что каталоги не имеют длины:
gci . -r | sort Length -desc | select fullname -f 10
Ответ 3
Я писал о подобной проблеме, где я хочу найти самые большие файлы в каталоге и все подкаталоги (весь 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 самых больших файлов, вы можете просто добавить параметр -First 10
к вызову Select-Object.
Ответ 4
В linux:
ls -XS | head -n 10
EDIT: О, теперь я вижу тег "powershell", извините за мой бесполезный ответ;)
Ответ 5
Если вам нужно немного форматирования результирующего набора, вот две функции с более приятными выводами:
#Function to get the largest N files on a specific computer 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
}
Ответ 6
Основной, чтобы получить 10 самых больших файлов в локальном каталоге:
ls -S -l | head -n 10
или вы можете использовать
du -a/home/directory | sort -n -r | head -n 10