Как в 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 относятся только к имени файла, но не относятся к именам папок и подпапок.
Связанные статьи:
- Как в PowerShell и Get-ChildItem найти только папки (100%)
- Замена chkdsk в PowerShell для исправления ошибок диска (50%)
- Как узнать размер свободного и занятого пространства диска в PowerShell (50%)
- Как узнать текущий каталог в командной строке Windows. Аналог pwd в PowerShell (50%)
- Аналог cd и chdir в PowerShell. Как поменять текущую рабочую папку в PowerShell (50%)