Для поиска больших файлов на диске можно использовать проводник Windows одну из сторонних утилит (например, WinDirStat или TreeSize) или ваш любимый файловый менеджер. В некоторых случаях для быстрого поиска больших файлов на диске, удобнее использовать консоль PowerShell, т.к. не нужно ставить сторонние инструменты.
Например, чтобы вывести список 10 самых больших файлов на указанном диске, достаточно выполнить такую команду PowerShell:
Get-ChildItem -Path c:\ -Recurse –Force| sort -descending -property length | select -first 10 FullName, Length
Через некоторое время (в зависимости от размера диска и количества файлов), команда вернет список из 10 самых больших файлов, отсортированных в порядке уменьшения размера.
Для получения списка файлов в указанном каталоге используется командлет
Get-ChildItem
(или можно использовать один из псевдонимов/алиасов:
ls
,
dir
или
gci
). В команде поиска больших файлов мы использовали следующие параметры:
-
-Path C:\
— путь к каталогу, с которого нужно начать поиск. Можно выполнить поиск файлов по всему диску или только в указанной папке (например, в профиле пользователя или сетевой папке). Если путь не указано, будет выполнен поиск в текущем каталоге. В параметре -Path через запятую можно указать сразу несколько папок или дисков в которых нужно выполнить поиск:-Path C:\,G:\,D:\IS0
-
-Recurse
– опция указывает, что нужно выполнить рекурсивный поиск во всех вложенных подкаталогах. Можно ограничить проверку определенным уровнем вложенности с помощью параметра –Depth. -
-Force
– ключ позволяет выполнять поиск пои скрытым и системным папкам (файлам), которые по умолчанию игнорируются. -
Sort -descending -property length
– отсортировать файлы по убыванию размера (свойство length) -
Select FullName, Length
– вывести полный путь к файлу и его размер -
-first 10
– вывести только первые 10 файлов
Get-ChildItem : Отказано в доступе по пути "C:\Windows\CSC".
строка:1 знак:1
+ Get-ChildItem c:\ -r|sort -descending -property length | select -firs ...
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Windows\CSC:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Чтобы подавить появление таких ошибок добавьте в команду Get-ChildItem параметр -ErrorAction SilentlyContinue.
По умолчанию, командлет Get-ChildItem выводит размер файла в байтах. Чтобы преобразовать их в гигабайты и добавить полный путь к каталогам, измените команду следующим образом:
Get-ChildItem c:\ -r -Force -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="GB";Expression={[Math]::round($_.length / 1GB, 2)}}
Полученный список больших файлов можно преобразовать в удобную графическую таблицу с помощью командлета Out-GridView:
Get-ChildItem c:\ -r -Force -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="GB";Expression={[Math]::round($_.length / 1GB, 2)}} | Out-GridView
Найти на диске все файлы, больше 10 Гб и экспортировать список в CSV файл:
GCi C:\ -Recurse -Force -ErrorAction SilentlyContinue | where-object {$_.length -gt 10GB} | Sort-Object length | ft fullname,length| Export-Csv c:\pc\LargeFiles_Report.csv
Опции —Include и —Exclude позволяют включить или исключить из выборки определенные типы файлов. Например, чтобы исключить из вывода файлы с расширениями SYS и VMDK:
Get-ChildItem G:\ -Exclude "*.sys","*.vmdk" -Recurse -Force -ErrorAction SilentlyContinue| sort -descending -property length | select -first 10 FullName, Length
Для выборки файлов по определенному шаблону можно использовать опцию -Filter. Например,
-Filter "*image*"
. Команда с Filter отрабатывает гораздо быстрее, т.к. результаты фильтруются непосредственно при получении данных.
Можно найти большие файлы на удаленном компьютере. Для этого можно обратиться к сетевой папке по UNC пути (допустимо обращаться к стандартным административным шарам C$,D$,.., на удаленном компьютере):
Get-ChildItem -Path \\PC123\C$ -Recurse |where-object {$_.length -gt 10GB} |sort -descending -property length | select -first 10 FullName, Length
Или получить список топ больших файлов на нескольких компьютерах с помощью командлете Invoke-Command:
$ComputerList = @( "server1", "server2")
Invoke-Command -ComputerName $ComputerList -ScriptBlock {gci -Path C:\ -r| sort -descending -property length | select -first 10 name, length}