===== Exemplos de Globbing e Redirecionadores no Linux =====
==== Nível Básico ====
* **Listar todos os arquivos `.txt` no diretório atual:**
- ls *.txt
- Usa o padrão `*.txt` para listar todos os arquivos com a extensão `.txt`.
* **Concatenar todos os arquivos de log `.log` e exibir no terminal:**
- cat *.log
- Usa o *globbing* `*.log` para combinar todos os arquivos `.log` e exibir o conteúdo.
* **Excluir todos os arquivos que começam com "temp" no diretório atual:**
- rm temp*
- Usa o padrão `temp*` para remover todos os arquivos cujo nome começa com "temp".
* **Mover todos os arquivos que terminam com `.bak` para um diretório específico:**
- mv *.bak /backup/
- Usa `*.bak` para mover todos os arquivos com extensão `.bak` para o diretório `/backup/`.
* **Redirecionar a saída de um comando para um arquivo:**
- ls -l > lista_de_arquivos.txt
- Salva a saída detalhada do comando `ls` no arquivo `lista_de_arquivos.txt`.
==== Nível Intermediário ====
* **Contar todas as linhas de arquivos que começam com "relatorio":**
- wc -l relatorio*
- Conta o número de linhas em todos os arquivos que começam com "relatorio".
* **Copiar todos os arquivos `.jpg` e `.png` para o diretório `imagens/`:**
- cp *.{jpg,png} imagens/
- Usa *globbing* para copiar todos os arquivos `.jpg` e `.png` para o diretório `imagens/`.
* **Listar arquivos cujo nome contém um número (ex.: `arquivo1.txt`, `dados2023.csv`):**
- ls *[0-9]*
- Lista todos os arquivos cujo nome contém um número (qualquer número entre 0 e 9).
* **Redirecionar a saída de um comando para dois arquivos simultaneamente:**
- echo "Dados importantes" | tee arquivo1.txt arquivo2.txt
- Escreve a mensagem "Dados importantes" em dois arquivos ao mesmo tempo.
* **Buscar por arquivos `.conf` e redirecionar o resultado para um arquivo:**
- find /etc -name "*.conf" > lista_conf.txt
- Usa o comando `find` para procurar arquivos `.conf` no diretório `/etc` e salva a lista em `lista_conf.txt`.
==== Nível Avançado ====
* **Exibir os 5 arquivos `.log` mais recentes, ordenados por data:**
- ls -lt *.log | head -n 5
- Lista todos os arquivos `.log`, ordenados por data de modificação, e exibe apenas os 5 mais recentes.
* **Excluir todos os arquivos exceto aqueles que começam com "backup" e terminam em `.tar.gz`:**
- rm !("backup*.tar.gz")
- Remove todos os arquivos no diretório atual, exceto os que seguem o padrão "backup*.tar.gz" (requer que o *extglob* esteja habilitado).
* **Buscar por palavras-chave em vários arquivos de log e redirecionar os erros para um arquivo separado:**
- grep "erro" *.log > erros.txt 2> grep_erros.log
- Procura por "erro" em todos os arquivos `.log` e redireciona os erros do comando `grep` para `grep_erros.log`.
* **Copiar todos os arquivos `.sh` que foram modificados nos últimos 7 dias para o diretório `scripts_backup/`:**
- find . -name "*.sh" -mtime -7 -exec cp {} scripts_backup/ \;
- Encontra todos os arquivos `.sh` modificados nos últimos 7 dias e os copia para o diretório `scripts_backup/`.
* **Redirecionar tanto a saída padrão quanto os erros para um arquivo de log:**
- comando > saida.log 2>&1
- Redireciona a saída padrão do `comando` para `saida.log` e também redireciona os erros para o mesmo arquivo.
==== Nível Especializado ====
* **Combinar múltiplos arquivos `.csv` em um só, preservando o cabeçalho apenas do primeiro arquivo:**
- awk '(NR == 1) || (FNR > 1)' *.csv > combinado.csv
- Usa `awk` para combinar todos os arquivos `.csv`, preservando o cabeçalho do primeiro arquivo e excluindo os cabeçalhos dos arquivos subsequentes.
* **Compressão paralela de todos os arquivos `.log` maiores que 100 MB:**
- find . -name "*.log" -size +100M -print0 | xargs -0 -P4 gzip
- Encontra arquivos `.log` maiores que 100 MB e os comprime em paralelo usando 4 threads.
* **Comparar o conteúdo de dois diretórios, exibindo as diferenças em arquivos `.txt`:**
- diff <(ls dir1/*.txt) <(ls dir2/*.txt)
- Usa `diff` para comparar o conteúdo de dois diretórios com arquivos `.txt`, exibindo as diferenças.
* **Excluir arquivos em um diretório que não estão em um diretório de backup correspondente:**
- rsync -av --delete /origem/ /backup/
- Usa `rsync` para sincronizar os arquivos entre dois diretórios e remover do diretório de destino arquivos que não existem mais no diretório de origem.
* **Executar um comando em todos os arquivos `.conf`, concatenando as saídas em um único arquivo:**
- for file in *.conf; do cat "$file"; done > combinado_conf.txt
- Executa um `cat` em todos os arquivos `.conf` e concatena o conteúdo no arquivo `combinado_conf.txt`.