Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
模式语法
模式是换行分隔字符串的字符串或列表。 文件和目录名称与在任务中包含(或有时排除)它们的模式进行比较。 可以通过堆叠多个模式来构建复杂的行为。 有关完整语法指南,请参阅 fnmatch。
匹配字符
大多数字符都用作完全匹配项。 计算为“完全”匹配的内容与平台相关:Windows 文件系统不区分大小写,因此模式“ABC”将匹配名为“abc”的文件。 在区分大小写的文件系统上,该模式和名称不匹配。
以下字符具有特殊行为。
-
*与文件或目录名称中的零个或多个字符匹配。 请参阅示例。 -
?与文件或目录名称中的任何单个字符匹配。 请参阅示例。 -
[]与文件或目录名称中的字符集或范围匹配。 请参阅示例。 -
**递归通配符。 例如,/hello/**/*匹配/hello的所有后代。
扩展的旋律
-
?(hello|world)- 匹配hello或零次或world一次 -
*(hello|world)- 零个或多个匹配项 -
+(hello|world)- 一个或多个匹配项 -
@(hello|world)- 恰好一次 -
!(hello|world)- 不hello或world
注释
扩展 glob 不能跨越目录分隔符。 例如, +(hello/world|other) 无效。
注释
以 # 开头的模式被视为注释。
排除模式
前导 ! 更改要排除的包含模式的含义。
可以包括一个模式,排除其中的一个子集,然后重新包含其中的一个子集:这称为“交错”模式。
多个 ! 翻转含义。 请参阅示例。
必须在排除模式之前定义包含模式。 请参阅示例。
转义
在 [] 中包装特殊字符可用于转义文件名中的文本 glob 字符。 例如,文本文件名 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 由 AI 提供支持,因此可能会带来意外和错误。 有关详细信息,请参阅 Copilot 常规使用常见问题解答。
**/*.ext glob 模式是许多文件系统和工具(如bash、zshPython glob等)中使用的强大的递归模式,用于匹配以当前目录和所有子目录结尾.ext的所有文件,无论嵌套有多深。
下面是一些匹配 **/*.ext的示例路径:
sample1/A.extsample1/B.extsample2/C.extsample2/subdir1/D.extsample2/subdir1/subdir2/E.extsample3/F.extsample3/subdir3/G.extsample3/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