文件匹配模式引用

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

模式语法

模式是一个字符串或用换行符分隔的字符串列表。 文件和目录名称与模式进行比较以包括 (或有时在任务中排除它们) 。 可以通过堆叠多种模式来构建复杂的行为。 有关完整的语法指南,请参阅 fnmatch

匹配字符

大多数字符用作完全匹配项。 "精确" 匹配的计数是依赖于平台的: Windows 文件系统不区分大小写,因此模式 "abc" 与名为 "abc" 的文件匹配。 在区分大小写的文件系统上,该模式和名称不匹配。

以下字符具有特殊行为。

  • * 与一个或多个字符匹配。 请参阅 示例
  • ? 匹配文件或目录名称中的任何单个字符。 请参阅 示例
  • [] 匹配文件或目录名称中的一组或一系列字符。 请参阅 示例
  • ** 递归通配符。 例如, /hello/**/* 匹配的所有子代 /hello

扩展的组合

  • ?(hello|world) -匹配 helloworld 零次或一次
  • *(hello|world) -零个或多个匹配项
  • +(hello|world) -一个或多个匹配项
  • @(hello|world) -正好一次
  • !(hello|world) -不是 helloworld

请注意,扩展的 glob 不能跨越目录分隔符。 例如,+(hello/world|other) 就是无效的。

注释

以开头的模式被 # 视为注释。

排除模式

前导会 ! 更改包括模式的含义以排除。 您可以包括模式,排除其中的一个子集,然后重新包含的子集:这称为 "交错" 模式。

多个 ! 反转含义。 请参阅 示例

必须先定义 include 模式,然后才能排除它。 请参阅 示例

转义

可以使用包装中的特殊字符 [] 来转义文件名中的文本 glob 字符。 例如,可以将文本文件名 hello[a-z] 转义为 hello[[]a-z]

斜杠

/ 用作 Linux 和 macOS 上的路径分隔符。 大多数情况下,代理接受 Windows / 。 记录) Windows 分隔符 (的情况 \

示例

基本模式示例

星号示例

示例1: 给定模式 和文件:

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

模式将匹配:

ContosoWebsite.sln
FabrikamWebsite.sln
Website.sln

示例2: 给定模式 和路径:

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

模式将匹配:

ContosoWebsite/ContosoWebsite.proj
FabrikamWebsite/FabrikamWebsite.proj

问号示例

示例1: 给定模式 和文件:

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

模式将匹配:

log1.log
log2.log
log3.log

示例2: 给定模式 和文件:

image.tiff
image.png
image.ico

模式将匹配:

image.png
image.ico

字符集示例

示例1: 给定模式 和文件:

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

模式将匹配:

SampleA.dat
SampleC.dat

示例2: 给定模式 和文件:

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

模式将匹配:

SampleA.dat
SampleB.dat
SampleC.dat

示例3: 给定模式 和文件:

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