Как найти файл или папку по заданной маске
Обновлено: 21.11.2024
Какую команду и как мне использовать, чтобы получить список всех этих файлов с помощью тега поиска bat ?
Хотите ли вы перечислить совпадающие файлы только в текущем каталоге? в любом каталоге в текущем каталоге или ниже? где-нибудь в системе?
6 ответов 6
Поиск файлов с помощью bat в любом месте
Чтобы найти все файлы внутри /path/to/folder, имена которых содержат bat , вы можете использовать:
Я указал шаблон поиска *bat*, потому что, если кавычки были опущены и файлы соответствуют *bat* в текущем каталоге, оболочка расширит *bat* до их списка и передаст это em> найти . Тогда найти не получится. ( \*bat\* и "*bat*" также работают.)
Чтобы выполнить поиск в папке, в которой вы находитесь в данный момент (например, в той, на которую вы нажали cd), используйте . , как обычно:
Чтобы выполнить поиск по всему компьютеру, используйте / . Для поиска в вашем домашнем каталоге используйте ~ или полное имя вашего домашнего каталога. (Оболочка заменяет ~ на полный путь к вашему домашнему каталогу.)
Расширение или сужение поиска по названию
Если вы хотите выполнять поиск без учета регистра, чтобы файлы, содержащие BAT , bAt и т. д., сопоставлялись, используйте тест -iname вместо теста -name:
Я заметил, что все ваши файлы заканчиваются на .c . Если вы хотите найти только такие файлы, используйте:
Я заметил, что все ваши имена файлов имеют bat либо в самом начале, либо в самом конце части, предшествующей суффиксу .c. Если вы хотите избежать сопоставления таких файлов, как embattled.c , вы можете использовать:
-o — оператор или.
Соответствие только файлам
Чтобы найти только обычные файлы, а не папки, символические ссылки и специальные узлы устройств, можно использовать -type f . Это часто рекомендуется и иногда вполне уместно. но часто это не то, что вам действительно нужно, особенно если вы запускаете find с целью самостоятельного изучения вывода. Если бы у вас была символическая ссылка, соответствующая вашему запросу, разве вы не хотели бы узнать об этом?
Если вы хотите найти как обычные файлы, так и символические ссылки, вы можете использовать:
При этом используется оператор -o, а также круглые скобки для группировки (которые должны быть заключены в кавычки, чтобы оболочка не обрабатывала их особым образом; в противном случае вы получите синтаксическую ошибку).
Но предположим, что вы хотите видеть только символические ссылки, которые в конечном итоге указывают на обычный файл (а не символические ссылки на каталоги, узлы устройств и т. д.). На самом деле это даже проще: используйте -xtype вместо -type. Если вы не используете find с флагом -L, параметр -xtype для символической ссылки проверяет тип файла, на который указывает ссылка.
Если у вас есть символическая ссылка на другую символическую ссылку на файл, -xtype f будет соответствовать ей, даже если его прямая цель является другой символической ссылкой, а не обычным файлом. Это почти всегда то, что вам нужно.
Часто люди думают, что им нужен -type f , но на самом деле им нужен -xtype f .
Получение подробного вывода
действие find по умолчанию, если вы его не укажете, -print . Все приведенные выше команды эквивалентны самим себе с добавлением -print в конце.
find часто используется для запуска команд на основе найденных файлов, часто команд, которые вносят изменения. Но помимо -print есть и другие действия, целью которых является отображение результатов. Особый интерес представляет -ls :
Это дает подробную информацию о каждом файле в формате с несколькими столбцами, подобно (хотя и не совсем так) тому, что вы увидите, запустив ls file .
Automation Workshop позволяет использовать маски файлов в качестве параметра для нескольких входов триггеров и действий. Маски файлов предоставляют очень гибкие средства для идентификации файлов или групп файлов на основе их имени и расширения.
Основы
Маски файлов состоят из любой комбинации трех основных типов символов:
- Фиксированные символы, такие как буквы, цифры и другие символы, допустимые в именах файлов. <ли>? (вопросительный знак), который заменяет любой отдельный символ.
- * (символ звездочки), заменяющий любое количество различных символов.
Хотя очевидно, что маска файла, состоящая только из фиксированных символов, однозначно идентифицирует файл (например, маска файла picture.jpg относится только к файлу с именем picture.jpg ), маски файлов с подстановочными знаками (т. е. ? и * символы) могут относиться к одному или нескольким файлам.
Например, маска файла ?at.jpg относится ко всем файлам с тремя буквами в имени, оканчивающемся на at , и расширением .jpg, результирующая маска файла ?at.jpg для выбора файлов с именами cat.jpg , мат. jpg , hat.jpg , rat.jpg и все остальные файлы, начинающиеся с любого символа и заканчивающиеся на at.jpg .
Звездочка * подстановочный знак в составе маски файла заменяет неопределенное количество различных символов.Например, маска файла h*e.jpg относится ко всем файлам .jpg, которые начинаются с h, заканчиваются на e и содержат любое число (включая ноль) между ними, например he.jpg, hue.jpg, here.jpg, house .jpg и т. д.
Несколько масок
Многие действия поддерживают одновременное указание нескольких масок файлов, разделенных символом | характер трубы. Например, *.jpg | *.jpg выберет файлы с расширением .jpg и .jpg. Можно комбинировать еще больше (практически неограниченное количество) масок файлов в одном входе, например:
*.docx | *.xlsx | *.pptx и т. д.
Маски файлов и подстановочные знаки поддерживаются в любых параметрах действий или триггеров, которые указывают имена папок или файлов, обычно это действия файловой системы, сжатия, шифрования и FTP. Маска файла, по сути, представляет собой набор фиксированных и подстановочных знаков, используемых для сопоставления имен папок и файлов. Они предоставляют гибкие средства для идентификации определенного файла или группы файлов на основе их имени и расширения. Подстановочный знак можно использовать для замены любого другого символа или символов в строке. Используя маски и подстановочные знаки, вы можете легко указать, какие файлы и/или папки следует обрабатывать, а какие следует игнорировать.
Маски файлов могут состоять из любой комбинации следующего:
Фиксированные символы — буквы, цифры и другие символы, разрешенные в именах файлов.
Вопросительный знак (?) – обозначает любой отдельный символ.
Звездочка (*) — обозначает любую последовательность символов (включая отсутствие символов).
Хотя четко определено, что маска файла, содержащая только фиксированные символы, однозначно идентифицирует файл (например, маска файла myFile.txt относится только к текстовому файлу с именем myFile.txt ), маска файла, содержащая символы подстановки? и/или * может относиться к одному или нескольким файлам.
Несколько файлов маски
В большинстве случаев можно указать несколько файлов или объединить несколько масок подстановочных знаков, разделив каждую вертикальной чертой (|). Например, следующая маска включает все изображения JPG и GIF, содержащиеся в c:\temp\:
Подстановочные знаки позволяют маске файла соответствовать нескольким именам папок или файлов. В таблице ниже приведены различные примеры масок файлов.
Соответствует всем файлам, содержащим любое количество символов, с расширениями или без них (например, ввод A* соответствует любому файлу или папке, начинающейся с буквы A, за которой следует любое количество символов).
Соответствует всем файлам, содержащим любое количество символов и с любым расширением. Соответствует даже файлам без расширения (например, ввод A*.* соответствует любому файлу, начинающемуся с буквы A, за которой следует любое количество символов вместе с любым расширением).
Соответствует любому одиночному символу (например, ввод A? соответствует любому файлу, начинающемуся с буквы A, за которой следует любой одиночный символ).
Соответствует всем файлам, имена которых содержат любое количество символов с расширением .jpg (например, image_name.jpg, cool_pic.jpg, 1.jpg).
Соответствует всем файлам, имена которых содержат любое количество символов с расширением, начинающимся с буквы p (например, document.pdf, image_name.jpg, business.project, 1.ppt )
Соответствует всем файлам, имена которых начинаются с pic (например, picture_name.jpg, pictogram.ico, picker.html, pic ).
Соответствует всем файлам .html с именами, начинающимися с любой последовательности символов, за которыми следует строка mat и заканчивающаяся одним символом (например,automate.html, mate.html, tomato.html).
Соответствует всем файлам с именами, содержащими шесть символов и без расширения (например, 123456, myFile, my_pic, images)
Соответствует всем файлам .pdf, имена которых начинаются с doc, за которым следуют любые пять символов (например, document.pdf, доктрина.pdf, doc_1234.pdf).
Соответствует определенным именам файлов или маскам подстановочных знаков, которые находятся в том же каталоге (например, c:\temp\file1.txt|file2.jpg|file3.jpg).
Соответствует определенным именам файлов или маскам с подстановочными знаками, которые находятся в разных каталогах (например, c:\photos\*.jpg|\c:\music\*.mp3).
(Если указатель и содержание скрыты, щелкните значок в левом верхнем углу.)
Чтобы использовать следующие функции WinSCP, вам необходимо указать маску (шаблон) для выбора файлов (или других вещей):
Вы можете использовать диалоговое окно File Mask, чтобы помочь вам собрать маску.
Основной синтаксис
При указании маски вы можете использовать следующие шаблоны:
Шаблон | Значение | Пример |
---|---|---|
* | Соответствует любому количеству (включая ноль) произвольных символов. | *.doc; about*.html |
? | Соответствует ровно одному произвольному символу. | photo. jpg |
[abc] | Соответствует одному символу из набора. | index_[abc].html | < /tr>
[az] | Соответствует одному символу из диапазона. | index_[az].html |
Все остальные символы обрабатываются буквально (за исключением специальных символов, используемых в конструкциях, описанных ниже).
Чтобы избежать символа со специальным значением в шаблонах ( *?[ ), окружите его заданным шаблоном, например. файл со звездой[*].
Маски файлов нечувствительны к регистру.
Ограничения по размеру и времени
За маской файла могут следовать следующие ограничения по размеру и времени:
Шаблон | Значение | Пример |
---|---|---|
>size[KMG] td> | Соответствует файлам, размер которых превышает размер . Обратите внимание, что считается, что каталоги имеют нулевой размер. Можно использовать следующие единицы измерения: K (килобайт), M (мегабайт) или G (гигабайт). | *.bin>1M |
Соответствует файлам меньше размера . | ||
>yyyy-mm-dd[ hh:mm[:ss]] | Соответствует файлы изменены в последний раз после даты или времени (т.е. «новее чем»). | >2012-01-01 >2012-02-29 08:47 | tr>
>time[YDHNS][S] | Соответствует файлам, измененным в последний раз в течение указанного интервала (т.е. «новее чем»). Не может использоваться для каталогов. Должна использоваться одна из следующих единиц измерения: Y (годы), D (дни), H (часы), N (минуты) или S (секунды). Необязательный суффикс S означает округление времени перед интервалом до начала единицы интервала. Например, 2DS означает начало (полночь) позавчерашнего дня. 0HS относится к началу текущего часа. Ключевые слова сегодня и вчера можно использовать вместо 0DS и 1DS соответственно. | *.doc>1Y >2HS >yesterday |
Соответствует файлам, измененным в последний раз до даты или времени (т.е. «старше чем»). | *.doc | |
Соответствует файлам, измененным в последний раз перед указанным интервалом (т.е. «старше чем»). |
Также можно использовать операторы >= и
Чтобы экранировать символ оператора ( <> ), удвойте его, например файлс
Чтобы объединить ограничения, добавляйте их одно за другим без каких-либо разделителей (или используйте пробелы). Например. чтобы выбрать все файлы .doc, созданные в 2013 году: *.doc>=2013-01-01
Обратите внимание: если ваше ограничение содержит пробелы (особенно ограничение с датой и временем), чтобы использовать его в скрипте, вам нужно заключить всю маску в двойные кавычки.
Сочетание масок
Например, следующая маска включает все изображения JPG и GIF: *.jpg; *.jpg .
Чтобы избежать разделительного символа, удвойте его, например. файл с запятой .
Включить и исключить маски
Например, следующая маска включает все изображения JPG и GIF, но не включает изображения, начинающиеся с 2010 и 2011: *.jpg; *.jpg | 2010*; 2011* .
И часть включения, и часть исключения могут быть пустыми, что означает, что все включено или ничего не исключено соответственно. Когда включаемая часть пуста, маски сразу начинаются с пайпа. Когда часть исключения пуста, вы можете опустить завершающую черту.
Маска исключения имеет приоритет над маской включения. т.е. когда один и тот же файл соответствует как маске исключения, так и маске включения, он исключается. С другой стороны, использование маски включения эффективно исключает все невключенные файлы и папки.
Чтобы избежать вертикальной черты, удвойте ее, например. файл с||каналом .
Маска каталога
Чтобы использовать маску для каталогов, добавьте косую черту в конце, например картинки/ . Маска */ соответствует любому каталогу.
Обратите внимание, что при использовании диалогового окна «Маска файла» косая черта в конце масок каталогов добавляется автоматически.
Чтобы сделать операцию нерекурсивной, используйте маску исключения */ .2
Маски каталогов рекурсивны. Например. маскировать изображения/ соответствует каталогам /home/martin/images/ , а также /home/martin/images/avatars/ .
Во время передачи и синхронизации файлы и каталоги обрабатываются рекурсивно. Когда каталог исключен, подкаталоги и файлы, содержащиеся в исключенном каталоге, даже не оцениваются по маскам файлов. Они исключаются вместе с каталогом контейнера.
Маска пути
Когда маска выбирает файлы и имеет смысл выбирать их на основе каталога, вы можете расширить маску с помощью маски пути. Вы должны отделить маску пути от маски имени файла косой чертой. Например, маска /home/martinp/*.txt соответствует всем текстовым файлам в каталоге. Чтобы сопоставить все текстовые файлы в поддереве, используйте маску /home/martinp/*.txt; /home/martinp/*/*.txt .3
В текущей стабильной версии маска пути сопоставляется с полным путем, т. е. не с относительным путем пути к корню передачи или синхронизации файлов. Например. маска public_html/wiki/ не соответствует каталогу /home/martinp/public_html/wiki, даже если корнем передачи файлов или синхронизации является /home/martinp . Частичная маска пути, соответствующая абсолютному пути, может выглядеть как */public_html/wiki/ .
Для частичной маски пути не имеет значения, используете ли вы обратную ( \ ) или прямую косую черту ( / ); маска всегда будет работать как для локальных, так и для удаленных путей. Например, маска */public_html/*.bak будет соответствовать файлам резервных копий как в D:\Documents\public_html\, так и в /home/martinp/public_html/ .
В текущей бета-версии пути, начинающиеся с точки, за которой следует косая черта ( ./ или .\ ), сопоставляются с корнем операции (например, при передаче файлов или синхронизации). Например, при загрузке файлов и папок с локального пути D:\Documents\public_html\ на удаленный путь /home/martinp/public_html/ маска .\data\*.txt соответствует файлам *.txt в D:\Documents\public_html\ данные\ .
Вы также можете указать полный путь к определенному файлу или каталогу, как локальному, так и удаленному. Например, если вы хотите сопоставить только определенный каталог .csv, а не все, используйте /home/martinp/data/.csv/ вместо .csv/ .
Маска полного пути соответствует только локальному или удаленному пути, в зависимости от используемого синтаксиса.4 Это особенно важно для синхронизации. Для масок исключения может потребоваться использовать отдельную маску полного пути как для локального, так и для удаленного пути. Для масок включения использование маски полного пути не имеет смысла при синхронизации, так как она фактически исключает все файлы на другой стороне синхронизации, нарушая ее. Как правило, при синхронизации используйте частичные маски пути.
Исключения
Для удобства маска *.* является исключением, соответствующим любому файлу или каталогу, даже если в его имени нет точки. Напротив, маска *. соответствует любому файлу или каталогу без расширения.
Подпапки, в которых исключены все файлы
Вы хотите получить список файлов, соответствующих определенному шаблону.
Решение
Используйте командлет Get-ChildItem как для простой, так и для расширенной поддержки подстановочных знаков:
Чтобы найти все элементы в текущем каталоге, соответствующие подстановочному знаку PowerShell, укажите этот подстановочный знак в командлете Get-ChildItem:
Чтобы найти в текущем каталоге все элементы, соответствующие фильтру зависимого от поставщика, укажите этот фильтр в параметре -Filter:
Чтобы найти в текущем каталоге все элементы, не соответствующие подстановочному знаку PowerShell, укажите этот подстановочный знак в параметре -Exclude:
Чтобы найти все элементы в подкаталогах, соответствующие подстановочному знаку PowerShell, используйте параметры -Include и -Recurse или используйте подстановочный знак как часть параметра -Path:
Чтобы найти все элементы в подкаталогах, соответствующие фильтру зависимого от поставщика, используйте параметры -Filter и -Recurse:
Чтобы найти все элементы в подкаталогах, которые не соответствуют подстановочному знаку PowerShell, используйте параметры -Exclude и -Recurse:
Используйте командлет Where-Object для расширенной поддержки регулярных выражений:
Чтобы найти все элементы, имя файла которых соответствует регулярному выражению, используйте командлет Where-Object для сравнения свойства Name с регулярным выражением:
Чтобы найти все элементы с именем каталога, совпадающим с регулярным выражением, используйте командлет Where-Object для сравнения свойства DirectoryName с регулярным выражением:
Чтобы найти все элементы с именем каталога или именем файла, совпадающим с регулярным выражением, используйте командлет Where-Object для сравнения свойства FullName с регулярным выражением:
Обсуждение
Командлет Get-ChildItem поддерживает подстановочные знаки с помощью трех параметров:
Параметр -Path является первым параметром (и параметром по умолчанию). Хотя вы можете вводить простые пути, такие как . , C:\ или D:\Documents можно также указать пути, содержащие подстановочные знаки, например * , *.txt , [a-z]. log или даже C:\win*\*.N[a-f]?\F*\v2*\csc.exe .
Параметры -Include и -Exclude действуют как фильтр для использования подстановочных знаков в параметре -Path. Если указать параметр -Recurse, подстановочные знаки -Include и -Exclude применяются ко всем возвращаемым элементам.
Самая распространенная ошибка с параметром -Include возникает, когда вы используете его для пути без подстановочных знаков. Например, похоже, что это не дает ожидаемых результатов:
Эта команда не дает результатов, потому что вы не указали подстановочный знак для пути. Вместо этого правильная команда:
Параметр -Filter позволяет фильтровать результаты на основе зависимого от поставщика языка фильтрации поставщика, из которого вы получаете элементы. Поскольку поддержка подстановочных знаков PowerShell очень похожа на подстановочные знаки файловой системы, и большинство людей используют параметр -Filter только для файловой системы, этот параметр кажется избыточным (и эквивалентным). Однако поставщик SQL будет использовать синтаксис SQL в параметре -Filter. Аналогичным образом поставщик Active Directory будет использовать пути LDAP в параметре -Filter.
Это может быть неочевидно, но язык фильтрации поставщика файловой системы не совсем совпадает с синтаксисом подстановочных знаков PowerShell. Например, параметр -Filter не поддерживает диапазоны символов:
Фильтрация, зависящая от поставщика, часто может возвращать результаты гораздо быстрее, чем более многофункциональные подстановочные знаки PowerShell. Из-за этого PowerShell внутренне переписывает ваши подстановочные знаки в комбинацию подстановочных знаков и фильтрации для конкретного поставщика, чтобы дать вам лучшее из обоих миров!
Для получения дополнительных сведений о синтаксисе подстановочных знаков PowerShell введите Get-Help about_WildCards .
Если вы хотите выполнить еще более сложную фильтрацию, чем та, которую предлагает синтаксис подстановочных знаков PowerShell, командлет Where-Object предоставляет безграничные возможности. Например, чтобы исключить определенные каталоги из поиска, используйте следующее:
Или, в более простой форме:
Для фильтра, который сложно (или невозможно) указать программно, используйте командлет Out-GridView, как показано в рецепте 2.4, для интерактивной фильтрации вывода.
Благодаря конвейерной модели PowerShell расширенный набор файлов, сгенерированный Get-ChildItem, автоматически превращается в расширенный набор файлов, с которым могут работать другие командлеты:
Для получения дополнительных сведений о командлете Get-ChildItem введите Get-Help Get-ChildItem .
Для получения дополнительной информации о командлете Where-Object введите Get-Help Where-Object .
Читайте также: