Как найти большие файлы на диске с помощью PowerShell

Как найти большие файлы на диске с помощью PowerShell

Когда система оповещает вас о том, что на диске заканчивается свободное пространство, первое что делает администратор – пытается найти все большие файлы, которые занимают больше всего места. Вы можете использовать для поиска больших файлов проводник Windows (есть несколько предопределённых шаблонов поиска по размеру), любимый файловый менеджер или сторонние утилиты. Однако все эти средства, в отличии от PowerShell, требует установки на компьютере. Рассмотрим пример быстрого поиска больших файлов на диске с помощью PowerShell.

Для получения списка файлов в определенном каталоге (включая подпапки) и их размеров можно использовать командлет Get-ChildItem. Командлет может искать файлы по всему диску, или в определенной папке (например в пользовательских профилях или любых других папках).

Выведем список 10 самых больших файлов на диске C::

Get-ChildItem c: -r| sort -descending -property length | select -first 10 name, Length

В зависимости от размера диска и количества файлов на нем, выполнение команды может занять некоторое время.

Ключ –r (Recurse) указывает, что необходимо рекурсивного обойти все вложенные обьекты (каталоги). Можно ограничить проверку определённым уровнем вложенности с помощью параметра –Depth.

Если не указывать путь, поиск будет выполнен по всем подкаталогам в текущем каталоге.

Get-ChildItem - поиск самых больших файлов на диске с помощью powershell

Как вы видите, мы получили список из десяти самых больших файлов на диске, отсортированный в порядке уменьшения размера файла.

Совет. При доступе к некоторым каталогам даже с правами администратора, командлет может вернуть ошибку доступа:

Get-ChildItem : Отказано в доступе по пути "C:WindowsCSC".
строка:1 знак:1
+ Get-ChildItem c: -r|sort -descending -property length | select -firs ...
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:WindowsCSC:String) [Get-ChildItem], UnauthorizedAccessException

+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Чтобы подавить появление таких ошибок используйтей параметр -ErrorAction SilentlyContinue.

Get-ChildItem Отказано в доступе по пути

Как вы видите, размер файлов отображается в байтах. Для удобства их можно преобразовать в мегабайты. Кроме того, можно вывести каталог, в котором хранится найденный файл:

Get-ChildItem c: -r -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="Мб";Expression={[Math]::round($_.length / 1MB, 2)}}

список больщих файлов на диске в мегафайтах

Полученную табличку можно преобразовать в удобную графическую форму с помощью командлета Out-GridView:

Get-ChildItem c: -r|sort -descending -property length | select -first 10 name, DirectoryName, @{Name="Мб";Expression={[Math]::round($_.length / 1MB, 2)}} | Out-GridView

Out-GridView - графическое представление таблицы со списком больших файлов

Аналогичным образом вы можете найти все файлы, размер которых больше определенного значения, например, 200 Мб):

$size=200*1024*1024
GCi C: -recurse -ErrorAction SilentlyContinue | where-object {$_.length -gt $size} | Sort-Object length | ft fullname

Список файлов можно выгрузить в CSV файл так:

GCi C: -recurse | where-object {$_.length -gt $size} | Sort-Object length | ft fullname | Export-Csv c:pcLargeFiles_Report.csv

Если нужно посчитать размер всех файлов в каталоге, воспользуйтесь статьей: Как определить размер директории с помощью PowerShell.

Qiziqarli malumotlar
Как найти большие файлы на диске с помощью PowerShell