Usando curingas e expansão de padrões

ShellBeginner
Pratique Agora

Introdução

Imagine que você tem um quarto bagunçado, com centenas de papéis espalhados.

  • Alguns são tarefas de casa (math_hw.txt, english_hw.txt).
  • Alguns são fotos (pic1.png, pic2.png).
  • Alguns são lixo (temp_1, temp_2).

Se você quiser colocar todas as fotos em uma caixa, não vai pegá-las uma por uma. Você diria: “Pegue qualquer coisa que pareça uma foto”.

No Linux, fazemos isso com curingas (também chamados de expansão de padrões). Eles são como as cartas coringa de um baralho: podem representar outros caracteres.

Essa ideia é poderosa porque permite trabalhar com padrões em vez de nomes individuais. Em sistemas reais, pode haver dezenas, centenas ou milhares de arquivos correspondentes. A seleção baseada em padrões é uma das razões pelas quais o trabalho no shell escala tão bem.

Neste laboratório, você aprenderá a usar dois símbolos importantes:

  1. O asterisco (*): representa qualquer coisa (qualquer quantidade de caracteres).
  2. O ponto de interrogação (?): representa um único caractere.

Selecionar vários arquivos (*)

O asterisco * é o curinga mais conhecido. Ele significa “corresponder a qualquer quantidade de caracteres (inclusive zero)”.

Veja o que há na nossa pasta bagunçada:

ls

Você filtra os arquivos. Agora, imagine que quer listar apenas os arquivos de texto (arquivos que terminam em .txt).

Em vez de digitar ls notes.txt readme.txt report.txt, basta digitar *.txt.

Isso significa: “Encontre qualquer arquivo que termine com .txt”.

ls *.txt

Saída:

notes.txt  readme.txt  report.txt

O shell analisou *.txt, expandiu o padrão para corresponder a todos os arquivos de texto e ignorou image.png e os demais. Você acabou de filtrar a lista!

Essa explicação apresenta um conceito importante: o shell realiza a expansão do padrão antes de executar o comando ls. Em outras palavras, geralmente ls recebe uma lista pronta de nomes de arquivo, e não o padrão bruto *.txt. Isso explica por que os curingas funcionam com vários comandos diferentes.

Mover arquivos com *

Agora vamos fazer algo útil. Temos vários arquivos de dados: data_2025.csv, data_2024.csv, data_old.log.

Queremos organizar a pasta. Vamos mover todos os arquivos que começam com data_ para uma pasta de backup.

Primeiro, crie a pasta:

mkdir backup

Agora, use o curinga para mover todos os arquivos de uma só vez. O padrão data_* corresponde a qualquer nome que comece com data_.

mv data_* backup/

Acabamos de dizer ao Linux: “Se começar com data_, coloque na caixa de backup”.

É aqui que os curingas se tornam úteis na prática. Em vez de repetir um comando para cada arquivo correspondente, você expressa uma regra de nomenclatura uma única vez e deixa o shell expandi-la.

Verifique se eles saíram do diretório atual:

ls

Depois, confira se chegaram corretamente ao destino:

ls backup

Sucesso! Você moveu três arquivos com um único comando.

Selecionar um único caractere (?)

O asterisco * é abrangente: ele captura tudo. Às vezes, você precisa ser mais específico.

O curinga ponto de interrogação ? representa exatamente um caractere.

Por isso, ? é mais preciso que *. Ele é útil quando os nomes dos arquivos seguem um formato previsível e você quer evitar correspondências acidentais com nomes mais longos do que o esperado.

Temos arquivos chamados temp_1, temp_2 e temp_a.

  • temp_* corresponderia a temp_1 e a temp_very_long_name.
  • temp_? corresponde somente quando há exatamente um caractere depois do sublinhado.

Vamos testar o padrão antes de excluir os arquivos (um bom hábito!):

ls temp_?

Correspondências: temp_1, temp_2, temp_a.

Agora que temos certeza, vamos excluí-los:

rm temp_?

Verifique se eles foram removidos:

ls

Isso é muito útil para corresponder a arquivos com estruturas de nomenclatura específicas.

Vale lembrar o hábito de segurança desta etapa: visualize um padrão com um comando que não altera nada, como ls, antes de usá-lo com rm ou mv. A correspondência de padrões é poderosa; por isso, é recomendável verificar os arquivos antes de executar a ação.

Resumo

Você descobriu o poder da correspondência de padrões.

  • * (Asterisco): o curinga “corresponder a tudo”. É ótimo para selecionar todos os arquivos de um tipo (*.png) ou todos os arquivos de uma série (day_*).
  • ? (Ponto de interrogação): o curinga “um único caractere”. É ótimo para correspondências precisas (file_?.txt).

Isso conclui o Módulo 2. Agora você sabe como:

  1. Navegar pela árvore de arquivos (pwd, cd, ls).
  2. Criar arquivos e pastas (touch, mkdir).
  3. Copiá-los e movê-los (cp, mv).
  4. Excluí-los (rm, rmdir).
  5. Selecioná-los em lotes (*, ?).

Você está pronto para o Módulo 3, no qual abrirá esses arquivos e realmente lerá e editará o texto dentro deles!