Wildcards e metacharacters em comando de terminais

image_pdfimage_print

No Linux, um padrão de shell é uma string que consiste nos seguintes caracteres especiais, que são chamados de curingas (Wildcards) ou metacaracteres (metacharacters):

  • * – significa que pode ser qualquer caracter, em qualquer quantidade ou até mesmo nenhum
  • ? – significa que pode ser qualquer caracter
  • [seq] – significa que pode ser qualquer caracter da sequência seq
  • [!seq] –significa que pode ser qualquer caracter que não estiver na sequência seq

Existem situações onde estas facilidades acima descritas são imensamente úteis.

Por exemplo, é necessário apagar todos os arquivos de um diretório de uma determinada extensão.

rm *.png

Usando operadores de correspondências de padrões estendido no Linux

Para usar padrões de correspondência estendido, é necessário ativá-los, com o comando abaixo:

# shopt -s extglob

Os diferentes operadores de correspondência de padrões estendidos estão listados abaixo, onde pattern-list é uma lista contendo um ou mais nomes de arquivos, separados usando o caracter “|”:

  • *(pattern-list) – correspondente a zero ou mais ocorrências do padrão específico
  • ?(pattern-list) – correspondente a zero ou uma ocorrência do padrão específico
  • +(pattern-list) – corresponde a um ou mais ocorrências do padrão específico
  • @(pattern-list) – corresponde a um ocorrência do padrão específico
  • !(pattern-list) – corresponde a qualquer coisa, exceto o padrão especificado.

Um exemplo de como deletar todos os arquivos, exceto o arquivo de nome ‘nome_do_arquivo.ext’:

rm -v !("nome_do_arquivo.ext")

Lembrando que shopt -s extglob

Para excluir todos os arquivos, exceto o ‘nome_do_arquivo.ext’ e ‘nome_do_arquivo2.ext’:

rm -v !("nome_do_arquivo.ext|nome_do_arquivo2.ext");

Abaixo, como remover todos os arquivos, exceto alguns do tipo imagem:

rm -v !(*.jpg|*.png)

Para desativar o extglob, basta:

shopt -u extglob
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!