共用方式為


檔案比對模式參考

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

模式語法

模式是換行符分隔字串的字串或清單。 檔案和目錄名稱會與工作中包含(或有時排除)的模式進行比較。 您可以堆疊多個模式來建立複雜的行為。 如需完整的語法指南,請參閱 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: 給定型樣 *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 模式是一種強大的遞歸模式,用於許多檔案系統和工具(如bashzshPython 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