Поделиться через


Справочник по шаблонам сопоставления файлов

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Синтаксис шаблона

Шаблон — это строка или список строк с разделителями новой строки. Имена файлов и каталогов сравниваются с шаблонами для включения (или иногда исключения) в задачу. Сложное поведение можно создать, стекируя несколько шаблонов. Полный синтаксис см. в fnmatch.

Совпадение символов

Большинство символов используются в качестве точных совпадений. То, что считается "точным" совпадением, зависит от платформы: файловая система Windows не учитывает регистр, поэтому шаблон ABC будет соответствовать файлу под названием abc. В файловых системах с учетом регистра этот шаблон и имя не совпадают.

Следующие символы имеют особое поведение.

  • * соответствует нулю или нескольким символам в имени файла или каталога. См. примеры .
  • ? соответствует любому одному символу в имени файла или каталога. См. примеры .
  • [] соответствует набору или диапазону символов в имени файла или каталога. См. примеры .
  • ** рекурсивный подстановочный знак. Например, /hello/**/* совпадают со всеми потомками /hello.

Расширенное глоббирование

  • ?(hello|world) — совпадения hello или world ноль раз или один раз
  • *(hello|world) — ноль или больше вхождения
  • +(hello|world) — одно или несколько вхождений
  • @(hello|world) - ровно один раз
  • !(hello|world) - не hello или world

Замечание

Расширенные глобы не могут охватывать разделители каталогов. Например, +(hello/world|other) недопустимо.

Комментарии

Шаблоны, начинающиеся с #, рассматриваются как комментарии.

Исключение шаблонов

Ведущий ! изменяет значение шаблона включения, чтобы исключить. Вы можете включить шаблон, исключить подмножество, а затем повторно включить подмножество этого: это называется "чередующимся" шаблоном.

Несколько ! переворачивает значение. См. примеры .

Необходимо определить шаблон включения перед шаблоном исключения. См. примеры .

Экранирование

Перенос специальных символов в [] можно использовать для экранирования символов литеральных глобов в имени файла. Например, имя литерального файла hello[a-z] можно экранировать как hello[[]a-z].

Разрез

/ используется в качестве разделителя путей в Linux и macOS. В большинстве случаев агенты Windows принимают /. Случаи, когда необходимо задокументировать разделитель Windows (\).

Примеры

Базовые примеры шаблонов

Примеры звездочки

Пример 1. Учитывая шаблон *Website.slnи следующие файлы:

ConsoleHost.sln
ContosoWebsite.sln
FabrikamWebsite.sln
Website.sln

Шаблон будет совпадать:

ContosoWebsite.sln
FabrikamWebsite.sln
Website.sln

пример 2: учитывая *Website/*.proj шаблонов и пути:

ContosoWebsite/index.html
ContosoWebsite/ContosoWebsite.proj
FabrikamWebsite/index.html
FabrikamWebsite/FabrikamWebsite.proj

Шаблон будет совпадать:

ContosoWebsite/ContosoWebsite.proj
FabrikamWebsite/FabrikamWebsite.proj

Примеры вопросительного знака

Пример 1. Учитывая шаблон log?.logи следующие файлы:

log1.log
log2.log
log3.log
script.sh

Шаблон будет совпадать:

log1.log
log2.log
log3.log

Пример 2. Учитывая шаблон image.???и следующие файлы:

image.tiff
image.png
image.ico

Шаблон будет совпадать:

image.png
image.ico

Примеры набора символов

Пример 1. Учитывая шаблон Sample[AC].datи следующие файлы:

SampleA.dat
SampleB.dat
SampleC.dat
SampleD.dat

Шаблон будет совпадать:

SampleA.dat
SampleC.dat

Пример 2. Учитывая шаблон Sample[A-C].datи следующие файлы:

SampleA.dat
SampleB.dat
SampleC.dat
SampleD.dat

Шаблон будет совпадать:

SampleA.dat
SampleB.dat
SampleC.dat

Пример 3. Учитывая шаблон Sample[A-CEG].datи следующие файлы:

SampleA.dat
SampleB.dat
SampleC.dat
SampleD.dat
SampleE.dat
SampleF.dat
SampleG.dat
SampleH.dat

Шаблон будет совпадать:

SampleA.dat
SampleB.dat
SampleC.dat
SampleE.dat
SampleG.dat

Примеры рекурсивных подстановочных знаков

Учитывая шаблон **/*.extи следующие файлы:

sample1/A.ext
sample1/B.ext
sample2/C.ext
sample2/D.not

Шаблон будет совпадать:

sample1/A.ext
sample1/B.ext
sample2/C.ext

Следующий пример был создан Copilot. Copilot работает на основе искусственного интеллекта, поэтому возможны сюрпризы и ошибки. Подробности см. в Общие вопросы об использовании Copilot.

Шаблон **/*.ext glob — это мощный рекурсивный шаблон, используемый во многих файловых системах и средствах (например bash, zsh, Python globи т. д.) для сопоставления всех файлов, заканчивающихся текущим .ext каталогом и всеми подкаталогами, независимо от того, насколько глубоко вложенными.

Ниже приведены некоторые примеры путей, которые будут соответствовать **/*.ext:

  • sample1/A.ext
  • sample1/B.ext
  • sample2/C.ext
  • sample2/subdir1/D.ext
  • sample2/subdir1/subdir2/E.ext
  • sample3/F.ext
  • sample3/subdir3/G.ext
  • sample3/subdir3/subdir4/H.ext

Часть ** означает любое количество каталогов (включая ноль) и *.ext означает, что любой файл заканчивается .ext.

Примеры шаблонов исключения

Учитывая следующий шаблон и следующие файлы:

*
!*.xml
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

Шаблон будет совпадать:

ConsoleHost.exe
ConsoleHost.pdb
Fabrikam.dll
Fabrikam.pdb

Примеры двойного исключения

Учитывая следующий шаблон и следующие файлы:

*
!*.xml
!!Fabrikam.xml
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

Шаблон будет совпадать:

ConsoleHost.exe
ConsoleHost.pdb
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

Примеры исключения папок

Учитывая следующий шаблон и следующие файлы:

**
!sample/**
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
sample/Fabrikam.dll
sample/Fabrikam.pdb
sample/Fabrikam.xml

Шаблон будет совпадать:

ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml