Globbing ou Expansão de Nomes de Arquivos

O que é Globbing?

É o processo de expansão de nomes realizado pelo bash.

Bash é um shell, ou seja, um interpretador de comandos. Provavelmente, a telinha preta que você usa no Linux está usando o bash para interpretar os comandos ls, date, pwd…

Um exemplo de expansão de nomes ou globbing é  “bol?” que pode ser expandido para “bola”, “bolo” já que a interrogação substitui algum outro caractere qualquer.

 

Gobbling e Expressões Regulares São Diferentes

Para entendermos Globbing temos que saber primeiro  que Expressões regulares  não tem relação com gobbling.

Expressões Regulares são muito mais complexas que a expansão de nomes feito pelo Bash.

Expressões Regulares são  conjuntos de caracteres que se casam/combinam com padrões. Exemplo, o caractere asterisco * é em expressões regulares significa zero ou mais vezes. Então  “bol*a” combina com palavras que entre começam com “bol” e terminam com “a”; como   “bolacha”, borracha ou até mesmo “bola” já que o asterisco representa zero ou mais vezes então “bol*” pode representar “bola”.

Além do asterisco * temos outros caracteres especias em expressões regulares, como a interrogação ?, o ponto . e o sinal do dolar $

 

Globbing no Bash

Bash não trabalha com Expressões Regulares. Bash trabalha com Expansão de nomes de arquivos usando para isso wild cards como ?, *, []

Por favor, não confunda os wild cards “? * []” com os caracteres das expressões regulares. Por mais que sejam os mesmos símbolos eles possuem significados diferentes!

Por favor mais uma vez 🙂 , não entender errado quando informado que o bash não trabalha com expressões regulares e você ver alguém usando expressões regulares no bash. Sim, alguns programas usados no bash  como grep, locate, sed, awk usam Expressões Regulares, mas não o bash em si.

 

Wild Cards Comuns

  • * = Asterisco representa zero ou mais caracteres
  • ? = Representa um único caractere
  • [] = Representa uma série de caracteres.

 

Expandindo os Nomes de Arquivos no Bash com Gobbling

  1. Listando todo o conteúdo da pasta com ls
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
  2. Listanado apenas nomes de arquivos que iniciam com “arq”
    [elder@centos65 pasta_de_arquivos]$ ls -l arq*
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
  3. Listando nomes começados com list
    [elder@centos65 pasta_de_arquivos]$ ls -l lis*
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
  4. Listando nomes que possuem  um caractere entre “arquivo0” e “.txt”
    [elder@centos65 pasta_de_arquivos]$ ls -l arquivo0?.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
  5. Listando arquivos que terminal com  a extensão “.txt”
    [elder@centos65 pasta_de_arquivos]$ ls -l *.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
  6. Listando arquivos que contém  0,1 2, 3 ou 4 em seus nomes
    [elder@centos65 pasta_de_arquivos]$ ls -l *[0-4]*
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
  7. Listando nomes de arquivos com 3 ou 2 em seus nomes
    [elder@centos65 pasta_de_arquivos]$ ls -l *[3,2]*
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
  8. Criando os arquivos “1.txt” e “3.txt”  arquivos de um única vez
    [elder@centos65 pasta_de_arquivos]$ touch {1,3}.txt
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:45 1.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:45 3.txt
  9. Criando arquivos “4.txt, 5.txt, 6.txt até o 20.txt”
    [elder@centos65 pasta_de_arquivos]$ touch {4..20}.txt
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 10.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 11.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 12.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 13.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 14.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 15.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 16.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 17.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 18.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 19.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:52 1.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 20.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:45 3.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 4.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 5.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 6.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 7.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 8.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 9.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
    
  10. Excluindo todo arquivo que possui “um número  + .txt”
    [elder@centos65 pasta_de_arquivos]$ rm [[:digit:]].txt
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 10.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 11.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 12.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 13.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 14.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 15.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 16.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 17.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 18.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 19.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:53 20.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
  11. Excluindo todo arquivo que possui “dois número  + .txt”
    [elder@centos65 pasta_de_arquivos]$ rm [[:digit:]][[:digit:]].txt
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo01.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo02.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 arquivo03.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt
  12. Excluindo arquivos que possuem 9 caracteres e finalizam com .txt
    [elder@centos65 pasta_de_arquivos]$ rm ?????????.txt
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0
    -rw-rw-r-- 1 elder elder 0 Out  9 11:26 lista_compras.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_enderecos.txt
    -rw-rw-r-- 1 elder elder 0 Out  9 11:25 lista_nomes.txt

Desabilitando e Ativando Globbing no Bash

Por padrão a expansão de nomes vem ativada no bash. Para desativar basta usar “set -f” para ativar use “set +f”

 

  1. Desabilitando Expansão de nomes no bash
    [elder@centos65 pasta_de_arquivos]$ set -f
  2. Tentando excluir todo arquivo começado com “lista”
    [elder@centos65 pasta_de_arquivos]$ rm lista*
    rm: não foi possível remover "lista*": Arquivo ou diretório não encontrado
    

    O arquivo não foi encontrado porque globbing está desativado

  3. Ativando Gobbling
    [elder@centos65 pasta_de_arquivos]$ set +f
  4. Novamente tentando excluir todo arquivo começado com “lista”
    [elder@centos65 pasta_de_arquivos]$ rm lista*
  5. Não restoum um arquivozinho sequer para contar história 🙂
    [elder@centos65 pasta_de_arquivos]$ ls -l
    total 0

 

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

One thought on “Globbing ou Expansão de Nomes de Arquivos

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *