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