Shell script: *, [], {}, ????, como utilizá-los?

Neste artigo abordarei o uso básico dos wildcards (coringas), que combinados com os comandos de terminal podem fazer mágica. Seu domínio é essencial para todo bom administrador de sistemas Linux.

[ Hits: 30.353 ]

Por: Fabio Maran em 30/01/2009 | Blog: http://movimentolivre.zip.net


*, [], {}, ????



Os wildcards, chamados de coringas ou meta-caracteres, nos auxiliaram em diversas tarefas, então vamos conhecê-los.

Interrogação (?)

Este wildcard tem a finalidade de substituir um ou mais caracteres, porém os mesmos devem existir, senão a busca retornará um valor nulo. Vamos a um exemplo para melhor entendimento.

O exemplo que melhor se encaixa é, eu estou lá em /etc e quero saber os runlevels de meu sistema, simplesmente venho e digito:

# ls -d /etc/rc?.d

Outro exemplo, se eu quisesse listar tudo começado com rc e que tivesse mais três caracteres depois:

# ls -d /etc/rc???

Em minha opinião este é o wildcard menos utilizado, porém se bem implementado em uma busca tem suas vantagens.

Asterisco (*)

Este sim você usa em seu dia-a-dia e às vezes nem se dá conta, sem dúvidas o mais utilizado. O asterisco (*) substitui qualquer quantidade de caracteres e pode ser colocado no começo de uma busca, no meio ou no fim, ou ainda podemos deixar em evidencia apenas a extensão de um arquivo e poder listar tudo que tiver esta extensão em seu nome.

Vamos a um exemplo:

# ls /etc/*.conf

Ou mesmo:

# ls -d /etc/d*.conf

Colchetes []

Este também é muito interessante, ele nos permite adicionar condições especiais para a saída da busca, algo como qualquer texto que termine com um número de 1 a 9 ou todos os diretórios iniciados com letra maiúscula ou minúscula.

Porém no uso do colchetes, tem que haver uma lógica. Vamos a um exemplo.

Quero listar todos os arquivos iniciados de a até c no diretório /etc:

# ls /etc/[a-c]*

Porém não serão listados arquivos que iniciam com letra maiúscula, se eu quisesse listar as maiúsculas ficaria da seguinte maneira:

# ls /etc/[a-cA-C]*

E se eu quisesse listar todos os arquivos exceto os iniciados por vogais, ficaria assim:

# ls /etc/[^AEIOU]*

Estes são exemplos não convencionais, vocês entenderão bem daqui a pouco quando passarmos para a prática.

Fique atento a um coisa, veja que cada colchete substitui apenas um caractere.

Chaves {}

Este wildcard nos permite especificar uma combinação de caracteres, números ou trechos para serem combinados com o que estiver fora dele, assim fica meio confuso né, mas vamos a um exemplo que rapidamente vocês entenderam.

Digamos que eu esteja no diretório corrente e queira listar todos arquivos que iniciem com a palavra text:

# ls -la . {text}*

O que mais chama a atenção neste wildcard é que o mesmo pode ser combinado com comandos de criação de arquivos e diretório, o que não podemos fazer usando o wildcard [], isso facilita e muito quando se tem um padrão no nome do arquivo e só mude algum caractere, muito bom para ministrar aulas ou dar de exemplos em artigos. :)

Veja: eu quero criar dez arquivos iniciados com o nome aula. Vejo e emito o seguinte comando:

# touch aula{1,2,3,4,5,6,7,8,9,10}

Interessante né, agora que já entenderam o que cada wildcard faz, que tal aprofundar-se um pouco mais?

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. *, [], {}, ????
   3. Utilizando os wildcards - modo listagem
   4. Utilizando os Wildcards - realizando movimentações
Outros artigos deste autor

Umask para leigos

Instalando o KDE 4 no Debian

Samba: Servidor de impressão e introdução a PDC (Primary Domain Controller)

Samba: Integração com ClamAV e outras coisas úteis

DansGuardian: Filtrando o acesso a Web

Leitura recomendada

Qual distribuibuição GNU/Linux devo utilizar?

Permissões no Linux

L.F.A.Q : Linux Frequently Asked Questions

Introdução ao Gentoo Linux

Estruturas de virtualização

  
Comentários
[1] Comentário enviado por alfameck em 30/01/2009 - 14:59h

ferramenta interessante.

[2] Comentário enviado por Tulio Hoffimann em 30/01/2009 - 15:10h

acrescentando, os metacaracteres "{}" podem ser usados juntamente com o operador ".." que serve para expandir uma sequencia, por exemplo:

No exemplo em que você ultilizou
$ touch aula{1,2,3,4,5,6,7,8,9,10}

Poderia ser facilmente substituido por
$ touch aula{1..10}

E o mesmo pode ser feito com caracteres não-numéricos..
$ echo {a..z}

[3] Comentário enviado por fulllinux em 30/01/2009 - 15:52h

Taí, maran e mais uma de suas super produções!!! hauauha
Abraço meu brother!!!

[4] Comentário enviado por maran em 30/01/2009 - 15:55h

@fulllinux:
kkkkk que isso meu velho, obrigado pelo coment, abraço meu velho, fica na paz!

[5] Comentário enviado por maran em 30/01/2009 - 16:17h

@tuliohm , Fala meu velho, sim podemos fazer estas e outras coisas algo como:

Criar diretorios mais rapidamente, um exemplo simples, bem básico:

$ mkdir /home/maran/{mp3,fotos,musicas,arquivos}

O que aconteceria, seria criado, todos estes diretorios dentro do {}, sendo subdiretórios de /maran

Ou tambem já povoar um arquivo com inumeras linhas, sendo prático para arquivos de exemplos, ou que você repita muitas vezes algumas palavras como:

$ echo -e "\nTeste "{1..20} > wildcards.txt

Eu criaria 20 linhas contendo desde Teste 1 até Teste 20 , cada um em uma linha.

Porem como digo no inicio do artigo, falarei sobre o básico!
Pois como o artigo indica-se a quem esta começando, acabaria confundindo o pessoal!

Obrigado pela observação!

[6] Comentário enviado por cassimirinho em 30/01/2009 - 16:27h

Gostei de ver, está em meus favoritos úteis.

[7] Comentário enviado por leandrojf em 30/01/2009 - 21:24h

boa maram...falo que ia mandar mais um artigo e mandou mesmo...parabens!!!

[8] Comentário enviado por Teixeira em 30/01/2009 - 22:58h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dese aimportancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[9] Comentário enviado por Teixeira em 30/01/2009 - 22:59h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois eeees materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[10] Comentário enviado por Teixeira em 30/01/2009 - 23:01h

Grande Maran!
Os wildcards ja eram muito importantes nos tempos do DOS,
e nao perderam nada dessa importancia ate hoje.
Voce abordou com muita felicidade o assunto.
Acho que ficou bem pratico e compreensivel,
pois essa materia em manuais por ai sempre foi de uma chatice tremenda, que voce conseguiu evitar.
Ficou bem leve.
Parabens!

[11] Comentário enviado por joao_15 em 01/02/2009 - 13:41h

Muito bom o artigo, foi esclarecedor.
Não sabia por exemplo que dava para se usar o {} para criar vários diretórios que estivessem lá dentro.

Vlw por contribuir e mostrar que os wildcards estão aí para nos ajudar.

[12] Comentário enviado por slackmen em 07/02/2009 - 12:47h

Bom artigo, isso eh uma coisa que muita gente esquece e esquenta a cabeça com coisas simples enquanto poderia usar os coringas...

[13] Comentário enviado por Weverton em 24/02/2009 - 10:55h

Artigo bacana, essas dicas sempre facilitam a vida de nós administradores.

[14] Comentário enviado por leandrojpg em 20/02/2010 - 22:15h

Boa Maran, excelente post eu por exemplo aprendi tudo depois que li seu post.

valeu mesmo, fica na paz irmão. valeu


Contribuir com comentário