文件匹配模式参考
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
排除模式示例
给定模式:
*
!*.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