Partilhar via


Referência de padrões de correspondência de arquivos

Serviços de DevOps do Azure | Azure DevOps Server 2022 | Azure DevOps Server 2020

Sintaxe de padrão

Um padrão é uma cadeia de caracteres ou uma lista de cadeias de caracteres delimitadas por novas linhas. Os nomes de arquivos e diretórios são comparados a padrões para incluí-los (ou às vezes excluí-los) em uma tarefa. Você pode criar um comportamento complexo empilhando vários padrões. Consulte fnmatch para obter um guia de sintaxe completo.

Corresponder caracteres

A maioria dos caracteres são usados como correspondências exatas. O que conta como uma correspondência "exata" depende da plataforma: o sistema de arquivos do Windows não diferencia maiúsculas de minúsculas, então o padrão "ABC" corresponderia a um arquivo chamado "abc". Em sistemas de arquivos que diferenciam maiúsculas de minúsculas, esse padrão e nome não corresponderiam.

Os caracteres a seguir têm um comportamento especial.

  • * corresponde a zero ou mais caracteres dentro de um nome de arquivo ou diretório. Ver exemplos.
  • ? corresponde a qualquer caractere único dentro de um nome de arquivo ou diretório. Ver exemplos.
  • [] corresponde a um conjunto ou intervalo de caracteres dentro de um nome de arquivo ou diretório. Ver exemplos.
  • ** curinga recursivo. Por exemplo, /hello/**/* corresponde a todos os descendentes de /hello.

Globbing estendido

  • ?(hello|world) - jogos hello ou world zero vezes ou uma vez
  • *(hello|world) - zero ou mais ocorrências
  • +(hello|world) - uma ou mais ocorrências
  • @(hello|world) - exatamente uma vez
  • !(hello|world) - não hello ou world

Observação

Os globs estendidos não podem abranger separadores de diretório. Por exemplo, +(hello/world|other) não é válido.

Observações

Padrões que começam com # são tratados como comentários.

Excluir padrões

A ! principal altera o significado de um padrão de inclusão para excluir. Você pode incluir um padrão, excluir um subconjunto dele e, em seguida, reincluir um subconjunto dele: isso é conhecido como um padrão "intercalado".

Várias ! invertem o significado. Ver exemplos.

Você deve definir um padrão de inclusão antes de um padrão de exclusão. Ver exemplos.

Fuga

A quebra automática de caracteres especiais no [] pode ser usada para escapar de caracteres glob literais em um nome de arquivo. Por exemplo, o nome de arquivo literal hello[a-z] pode ser escapado como hello[[]a-z].

Barra

/ é usado como separador de caminho no Linux e macOS. Na maioria das vezes, os agentes do Windows aceitam /. As ocasiões em que o separador do Windows (\) deve ser usado são documentadas.

Exemplos

Exemplos básicos de padrões

Exemplos de Asterisk

Exemplo 1: Dado o padrão *Website.sln, e os seguintes arquivos:

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

O padrão corresponderia:

ContosoWebsite.sln
FabrikamWebsite.sln
Website.sln

Exemplo 2: Dado o padrão *Website/*.proj e caminhos:

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

O padrão corresponderia:

ContosoWebsite/ContosoWebsite.proj
FabrikamWebsite/FabrikamWebsite.proj

Exemplos de pontos de interrogação

Exemplo 1: Dado o padrão log?.log, e os seguintes arquivos:

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

O padrão corresponderia:

log1.log
log2.log
log3.log

Exemplo 2: Dado o padrão image.???, e os seguintes arquivos:

image.tiff
image.png
image.ico

O padrão corresponderia:

image.png
image.ico

Exemplos de conjuntos de caracteres

Exemplo 1: Dado o padrão Sample[AC].dat, e os seguintes arquivos:

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

O padrão corresponderia:

SampleA.dat
SampleC.dat

Exemplo 2: Dado o padrão Sample[A-C].dat, e os seguintes arquivos:

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

O padrão corresponderia:

SampleA.dat
SampleB.dat
SampleC.dat

Exemplo 3: Dado o padrão Sample[A-CEG].dat, e os seguintes arquivos:

SampleA.dat
SampleB.dat
SampleC.dat
SampleD.dat
SampleE.dat
SampleF.dat
SampleG.dat
SampleH.dat

O padrão corresponderia:

SampleA.dat
SampleB.dat
SampleC.dat
SampleE.dat
SampleG.dat

Exemplos de curingas recursivos

Dado o padrão **/*.ext, e os seguintes arquivos:

sample1/A.ext
sample1/B.ext
sample2/C.ext
sample2/D.not

O padrão corresponderia:

sample1/A.ext
sample1/B.ext
sample2/C.ext

O exemplo a seguir foi gerado pelo Copilot. O copiloto é alimentado por IA, por isso surpresas e erros são possíveis. Para obter mais informações, consulte Perguntas frequentes sobre o uso geral do Copilot.

O **/*.ext padrão glob é um poderoso padrão recursivo usado em muitos sistemas de arquivos e ferramentas (como bash, zsh, Python glob, etc.) para corresponder a todos os arquivos que terminam no .ext diretório atual e todos os subdiretórios, não importa quão profundamente aninhados.

Aqui estão alguns exemplos de caminhos que corresponderiam **/*.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

A ** parte significa qualquer número de diretórios (incluindo zero) e *.ext significa qualquer arquivo que termina em .ext.

Excluir exemplos de padrões

Dado o seguinte padrão, e os seguintes arquivos:

*
!*.xml
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

O padrão corresponderia:

ConsoleHost.exe
ConsoleHost.pdb
Fabrikam.dll
Fabrikam.pdb

Exemplos de exclusão dupla

Dado o seguinte padrão, e os seguintes arquivos:

*
!*.xml
!!Fabrikam.xml
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

O padrão corresponderia:

ConsoleHost.exe
ConsoleHost.pdb
Fabrikam.dll
Fabrikam.pdb
Fabrikam.xml

Exemplos de exclusão de pasta

Dado o seguinte padrão, e os seguintes arquivos:

**
!sample/**
ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml
sample/Fabrikam.dll
sample/Fabrikam.pdb
sample/Fabrikam.xml

O padrão corresponderia:

ConsoleHost.exe
ConsoleHost.pdb
ConsoleHost.xml