Lógica de Repetição no Terminal: Processando Múltiplos Arquivos em Lote com o Loop for
Automatizar tarefas repetitivas em dezenas ou centenas de arquivos é uma das maiores vantagens do uso de scripts em Shell. O loop for no Bash permite iterar sobre conjuntos de arquivos que correspondem a um padrão, aplicando comandos em lote sem a necessidade de intervenção manual. A seguir, veja como percorrer arquivos de um diretório e executar operações com segurança.
Bash
#!/bin/bash
# Script para renomear e criar backups de múltiplos arquivos .txt em lote
# 1. Definindo o diretório alvo
DIRETORIO_ALVO="./documentos"
# Criando estrutura de teste
mkdir -p "$DIRETORIO_ALVO"
touch "$DIRETORIO_ALVO/nota1.txt" "$DIRETORIO_ALVO/nota2.txt" "$DIRETORIO_ALVO/relatorio.txt"
echo "=== Processando arquivos do diretório ==="
# 2. Iterando sobre todos os arquivos com extensão .txt
for ARQUIVO in "$DIRETORIO_ALVO"/*.txt; do
# Evita erros caso nenhum arquivo corresponda ao padrão (globbing)
[ -e "$ARQUIVO" ] || continue
# Extrai o nome do arquivo sem o caminho
NOME_BASE=$(basename "$ARQUIVO")
# Exemplo de processamento em lote: criando cópia de backup (.bak)
cp "$ARQUIVO" "${ARQUIVO}.bak"
echo "Backup gerado com sucesso: ${NOME_BASE}.bak"
done
Exemplo de uso e verificação no terminal:
Bash
# Executando o script para processar os arquivos criados
chmod +x loop_arquivos.sh
./loop_arquivos.sh
# Listando os backups gerados
ls ./documentos/*.bak
Pontos-chave
- Expansão de Nomes (Globbing): O padrão
*.extensaoé expandido pelo próprio Shell antes da execução, entregando ao loop a lista exata de caminhos encontrados. - Uso de Aspas Duplas: Sempre proteja a variável do loop com aspas (ex:
"$ARQUIVO") para evitar erros de execução em arquivos cujos nomes contenham espaços. - Prevenção contra Null Glob: Se nenhum arquivo corresponder ao padrão especificado, o Bash trata o padrão literal (ex:
*.txt) como valor da variável; a verificação[ -e "$ARQUIVO" ]evita falhas nesse cenário. - Extração de Nomes com
basename: O comandobasenameremove o caminho do diretório e retorna apenas o nome do arquivo, ideal para logs e mensagens limpas. - Manipulação Segura: Dê preferência ao loop
forsobre laços comls(for i in $(ls)), pois o uso direto do globbing lida corretamente com quebras de linha e caracteres especiais.
