檔案比對模式參考

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

模式語法

模式是換行符分隔字串的字串或清單。 檔案和目錄名稱會與工作中包含(或有時排除)的模式進行比較。 您可以堆疊多個模式來建立複雜的行為。 如需完整的語法指南,請參閱 fnmatch

比對字元

大部分字元會作為完全相符專案使用。 計算為「完全」相符的專案與平臺相依:Windows 檔案系統不區分大小寫,因此模式 “ABC” 會比對名為 “abc” 的檔案。 在區分大小寫的檔案系統上,該模式和名稱不會相符。

下列字元具有特殊行為。

  • * 比對檔案或目錄名稱內的零個或多個字元。 請參閱 範例
  • ? 會比對檔案或目錄名稱內的任何單一字元。 請參閱 範例
  • [] 會比對檔案或目錄名稱內的字元集或範圍。 請參閱 範例
  • ** 遞迴通配符。 例如, /hello/**/* 符合的所有子系 /hello

擴充的擷取

  • ?(hello|world) - 比對 helloworld 零或一次
  • *(hello|world) - 零或多個出現次數
  • +(hello|world) - 一或多個出現次數
  • @(hello|world) - 正好一次
  • !(hello|world) - 不是 helloworld

請注意,擴充的 Glob 無法跨越目錄分隔符。 例如,+(hello/world|other) 無效。

註解

開頭 # 的模式會被視為批注。

排除模式

前置 ! 變更要排除的 include 模式的意義。 您可以包含模式、排除其中的子集,然後重新包含的子集:這稱為「交錯」模式。

多個 ! 翻轉意義。 請參閱 範例

您必須在排除模式之前定義 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

排除模式範例

假設模式:

*
!*.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