Azure DevOps 服務 |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) 無效。
評論
以 # 開頭的模式會被視為批注。
排除模式
前置 ! 變更要排除的 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 模式是一種強大的遞歸模式,用於許多檔案系統和工具(如bash、zsh、Python 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