===== 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`.