Как выполнить поиск файлов в командной оболочке PowerShell?
Содержание
- Командлет Поиска Файлов
- Поиск По Маске
- Поиск По Атрибутам
- Поиск По Дате
- Поиск По Содержимому
- Использование Найденных Файлов
- Итог
Командлет Поиска Файлов
Поиск файлов в PowerShell осуществляется с помощью командлета Get-ChildItem. Вызов данного командлета без аргументов выполнит вывод содержимого текущей директории.
У данного командлета присутствуют несколько псевдонимов (aliases) - ls, dir, gci.
Разберем аргументы командлета позволяющие выполнить поиск файлов.
Аргументы командлета Get-ChildItem позволяют выполнить поиск файлов. Доступные параметры, маска имени файла (-Filter), стартовая директория поиска (-Path), и возможность рекурсивного поиска в поддиректориях (-Recurse).
Поиск по маске, для примера осуществим вывод всех файлов с расширением ZIP.
Файловые маски не могут содержать регулярных выражений, только стандартные "*" (любое количество символов) и "?" (один любой символ).
Как можно заметить, указывать параметр -Filter не обязательно, командлет сам понимает что ему была передана фильтрующая маска. Порядок следования параметров без их конкретного указания можно посмотреть во встроенной справке.
Параметр -Path позволяет задать путь начала поиска. Так же он допускает использовать символы файловых масок. Можно совмещать комбинацию фильтров в параметре -Path и -Filter.
Выведем содержимое диска C:\.
По умолчанию, выводится только содержимое текущей директории, но для полноценного поиска файлов необходимо выполнить обход всех файлов во всех поддиректориях. Осуществить такой обход позволяет параметр -Recurse.
Попробуем найти все файлы с расширением *.msc на диске C:\.
Как вы могли заметить, при выводе содержимого диска C:\ отсутствовали скрытые файлы. Отображение скрытых и системных файлов задается атрибутами, о которых поговорим далее.
По умолчанию, скрытые файлы не попадают выходной список командлета Get-ChildItem. Вывод файлов с различными атрибутами, такими как скрытый, системный и прочее, можно задать с помощью параметра -Attributes.
Возможные значения для данного параметра можно посмотреть во встроенной справке по командлету (Get-ChildItem -?).
Важные, или популярные, атрибуты вынесены в отдельные параметры, а именно -Directory, -File, -System, -Hidden.
Попробуем посмотреть файлы скрытые файлы на диске C:\.
При указании параметра -Hidden выводятся только скрытые файлы и папки.
С параметром -Attributes все иначе. Он позволяет комбинировать файловые атрибуты. Доступны три операции:
! - NOT, исключает файлы с данным атрибутом (!Directory)
+ - AND, включает файлы со всеми указанными атрибутами (System+Hidden)
, - OR, включает файлы с хотя бы с одним указанным атрибутом (System, Hidden, Directory)
Модификаторы можно комбинировать.
Сами названия атрибутов можно сокращать, что собственно и было продемонстрировано выше.
Список файлов полученный с помощью вышеописанных способов можно отфильтровать по дате. Делается это с помощью передачи результатов выполнения командлета Get-ChildItem командлету Where-Object.
Пример фильтрации вывода команды по дате, с применением псевдонимов.
Для командлета Where-Object можно задать так же другие условия, или даже несколько условий. Подробнее об этом можно узнать в справке по данному командлету.
Поиск по содержимому, предполагает обход всех файлов с целью найти в них искомый текст. Выполнить данную операцию можно с помощью передачи всех файлов по конвейеру командлету Select-String.
Для примера я создал три текстовых файла с текстом:
1.txt (first)
2.txt (second)
3.txt (first second third)
Структура расположения файлов следующая.
Теперь примеры поиска текста в данных файлах с помощью PowerShell.
Вывод данной команды немного скудный, нет информации о файлах. Это легко поправить, выполнив передачу полученных данных снова командлету Get-ChildItem. На этот раз воспользуемся псевдонимами для сокращения ввода команд.
Полученные списки файлов, всеми вышеописанными способами, можно передавать по конвейеру таким командлетам как Remove-Item, Move-Item, Copy-Item и прочим подобным. Тем самым упрощая работу с полученными файлами.
В статье было рассмотрено: Как выполнить поиск файлов в командной оболочке PowerShell?
Разберем аргументы командлета позволяющие выполнить поиск файлов.
Поиск По Маске
Аргументы командлета Get-ChildItem позволяют выполнить поиск файлов. Доступные параметры, маска имени файла (-Filter), стартовая директория поиска (-Path), и возможность рекурсивного поиска в поддиректориях (-Recurse).
Поиск по маске, для примера осуществим вывод всех файлов с расширением ZIP.
# Вывод файлов с раширением *.zip
Get-ChildItem *.zip
Файловые маски не могут содержать регулярных выражений, только стандартные "*" (любое количество символов) и "?" (один любой символ).
# Вывод файлов с раширением *.zip и именем состоящим из трех символов
Get-ChildItem ???.zip
Как можно заметить, указывать параметр -Filter не обязательно, командлет сам понимает что ему была передана фильтрующая маска. Порядок следования параметров без их конкретного указания можно посмотреть во встроенной справке.
# Вывод справки
Get-ChildItem -?
Параметр -Path позволяет задать путь начала поиска. Так же он допускает использовать символы файловых масок. Можно совмещать комбинацию фильтров в параметре -Path и -Filter.
Выведем содержимое диска C:\.
# Вывод содержимого указанной директории
Get-ChildItem C:\
# То же самое что и выше, но с прямым указанием параметра
Get-ChildItem -Path C:\
По умолчанию, выводится только содержимое текущей директории, но для полноценного поиска файлов необходимо выполнить обход всех файлов во всех поддиректориях. Осуществить такой обход позволяет параметр -Recurse.
Попробуем найти все файлы с расширением *.msc на диске C:\.
# Вывод всех файлов *.msc на диске C:\
Get-ChildItem -Path C:\ -Filter *.msc -Recurse -ErrorAction SilentlyContinue
Как вы могли заметить, при выводе содержимого диска C:\ отсутствовали скрытые файлы. Отображение скрытых и системных файлов задается атрибутами, о которых поговорим далее.
Поиск По Атрибутам
По умолчанию, скрытые файлы не попадают выходной список командлета Get-ChildItem. Вывод файлов с различными атрибутами, такими как скрытый, системный и прочее, можно задать с помощью параметра -Attributes.
Возможные значения для данного параметра можно посмотреть во встроенной справке по командлету (Get-ChildItem -?).
Важные, или популярные, атрибуты вынесены в отдельные параметры, а именно -Directory, -File, -System, -Hidden.
Попробуем посмотреть файлы скрытые файлы на диске C:\.
# Вывод файлов диска C:\
Get-ChildItem C:\
# Вывод файлов диска C:\ включая скрытые
Get-ChildItem C:\ -Hidden
При указании параметра -Hidden выводятся только скрытые файлы и папки.
С параметром -Attributes все иначе. Он позволяет комбинировать файловые атрибуты. Доступны три операции:
! - NOT, исключает файлы с данным атрибутом (!Directory)
+ - AND, включает файлы со всеми указанными атрибутами (System+Hidden)
, - OR, включает файлы с хотя бы с одним указанным атрибутом (System, Hidden, Directory)
Модификаторы можно комбинировать.
# Вывод файлов диска C:\ с атрибутами - скрытый, системный, директории
Get-ChildItem C:\ -Attributes H,S,D
Сами названия атрибутов можно сокращать, что собственно и было продемонстрировано выше.
Поиск По Дате
Список файлов полученный с помощью вышеописанных способов можно отфильтровать по дате. Делается это с помощью передачи результатов выполнения командлета Get-ChildItem командлету Where-Object.
Пример фильтрации вывода команды по дате, с применением псевдонимов.
# Вывод файлов дата которых больше или равна дате 28.10.2019 20:00
ls | ? LastAccessTime -GE (Get-Date "28.10.2019 20:00")
Для командлета Where-Object можно задать так же другие условия, или даже несколько условий. Подробнее об этом можно узнать в справке по данному командлету.
Поиск По Содержимому
Поиск по содержимому, предполагает обход всех файлов с целью найти в них искомый текст. Выполнить данную операцию можно с помощью передачи всех файлов по конвейеру командлету Select-String.
Для примера я создал три текстовых файла с текстом:
1.txt (first)
2.txt (second)
3.txt (first second third)
Структура расположения файлов следующая.
Теперь примеры поиска текста в данных файлах с помощью PowerShell.
# Поиск всех файлов с текстом "first"
Get-ChildItem -Recurse | Select-String "first"
Вывод данной команды немного скудный, нет информации о файлах. Это легко поправить, выполнив передачу полученных данных снова командлету Get-ChildItem. На этот раз воспользуемся псевдонимами для сокращения ввода команд.
# Поиск всех файлов с текстом "first" с подробным выводом информации о файлах
ls -r | Select-String "first" | ls
Использование Найденных Файлов
Полученные списки файлов, всеми вышеописанными способами, можно передавать по конвейеру таким командлетам как Remove-Item, Move-Item, Copy-Item и прочим подобным. Тем самым упрощая работу с полученными файлами.
Итог
В статье было рассмотрено: Как выполнить поиск файлов в командной оболочке PowerShell?
Комментариев нет :
Отправить комментарий