Как в PowerShell найти файлы большого размера (с помощью Get-Childitem)


Эта инструкция расскажет, как найти файлы большого размера (более 2 ГБ, 3 ГБ, 10 ГБ или любого другого размера). А также как составить список больших файлов в PowerShell.

Для поиска файлов мы будем использовать командлет Get-Childitem. Этот командлет получает элементы и дочерние элементы в одном или нескольких указанных местах. Описание командлета довольно витиевато — всё дело в том, что Get-Childitem может работать не только с файловой системой, но и с другими хранилищами, например, реестром Windows или переменными окружения.

Но для наших целей это не важно, поэтому можно упрощённо сказать, что командлет Get-Childitem ищет файлы и каталоги в указанной папке. В качестве дополнительных параметров, Get-Childitem может принимать имена (или части имён) файлов, для фильтрации выводимых данных. Но по размеру файлов Get-Childitem искать не может, поэтому мы привлечём ещё один командлет — Where-Object, который может фильтровать данные по заданным параметрам.

Во всех командах командлет Get-Childitem будет использоваться с опцией -File, она означает выводить только файлы и не показывать папки.

Следующая команда выполнит поиск на диске Z: и выведет файлы размер которых больше 2 ГБ:

Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB}

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

В целом, команда сработала как и ожидалась и были найдены большие файлы на диске. Если данных много, то вы можете их упорядочить. Например, следующая команда выполнит поиск на диске Z: файлов размер которых больше 2 ГБ и выведет их отсортировав от самого большого; к тому же, размер файлов будет выведен в более наглядном виде:

Get-ChildItem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB} | Sort-Object length -Descending | Select-Object Name,Directory,@{n='GB';e={"{0:N2}" -F ($_.length/ 1GB)}} | Format-List Name,Directory,GB

Теперь мы легко можем найти самые большие файлы — очень удобно, если вы собираетесь обрабатывать файлы вручную (например, удалить самые большие файлы или сделать их резервную копию).


Но что если нам нужен просто список файлов с самым большим размером? Этот список можно использовать для автоматизации последующей работы с большими файлами. Если вы хотите просто вывести список больших файлов с полным путём до них, то выполните следующую команду:


Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB} | Format-Table -Property FullName -HideTableHeaders

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

Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB} | Format-Table -Property FullName -HideTableHeaders > bigfiles.txt

Эта команда аналогично предыдущей, для тех, кто всегда хочет оставаться в духе PowerShell:

Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB} | Format-Table -Property FullName -HideTableHeaders | Out-File bigfiles.txt
Get-Content bigfiles.txt

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

Get-ChildItem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 2GB} | Sort-Object length -Descending | Select-Object Name,Directory,@{n='GB';e={"{0:N2}" -F ($_.length / 1GB)}} | Out-GridView -Title "Large Files"

Если вы хотите настроить поиск больших файлов, то вы можете использовать для этого командлет Get-Childitem с опциями -Filter и -Exclude.

С помощью опции -Filter вы можете указать имя или часть имени файлов, которые вас интересуют, то есть будут найдены только большие файлы с именем совпадающим с указанным в опции -Filter шаблоном. В данном случае будут показаны файлы размером более 2 Гигабайт, в имени которых присутствует строка «DT»:

Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue -Filter "*DT*" | Where-Object {$_.Length -gt 2GB}

При желании вы можете указать файлы, которые должны быть исключены из поиска, для этого используйте опцию -Exclude. Например, в следующем примере будут найдены все файлы размером более 2 Гигабайт в имени которых нет строки «.NX».

Get-Childitem -Path Z:\ -File -Recurse -ErrorAction SilentlyContinue -Exclude "*.NX*" | Where-Object {$_.Length -gt 2GB}

Опции -Filter и -Exclude могут быть добавлены к командлету Get-Childitem в любых из показанных выше команд.

Обратите внимание, что опции -Filter и -Exclude относятся только к имени файла, но не относятся к именам папок и подпапок.


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *