Olá, será que comi bola em algum momento?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, será que comi bola em algum momento?
Ola
O erro principal é este:
tar (child): {ARQUIVO_DIR}/logs_2025-11-05.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
E antes disso:
mv: cannot stat '../myapp/logs-processados/logs_stats_2025-11-05.txt': No such file or directory
Ou seja: o script está tentando mover e compactar arquivos que ainda não existem, ou o caminho que ele usa não foi criado antes da chamada ao tar.
O que está acontecendo
Na segunda imagem, seu script define:
ARQUIVO_DIR="../myapp/logs-processados"
TEMP_DIR="../myapp/logs-temp"
E mais embaixo, tenta:
tar -czf "${ARQUIVO_DIR}/logs_$(date +%F).tar.gz" -C "$TEMP_DIR" .
Mas o erro indica que ${ARQUIVO_DIR} não existia quando o tar foi executado — ou seja, o diretório ../myapp/logs-processados não foi criado antes da compactação.
Como corrigir
Adicione logo no início do seu script (após definir as variáveis):
mkdir -p "$ARQUIVO_DIR"
mkdir -p "$TEMP_DIR"
Parece que você já tem um mkdir -p "$TEMP_DIR" ali, mas talvez tenha movido ou apagado o mkdir -p "$ARQUIVO_DIR" — ele precisa vir antes do tar e antes de qualquer mv ou echo > "$ARQUIVO_DIR/...txt".
Outras boas práticas
Verifique se há logs antes de processar:
if [ -z "$(ls -A "$LOG_DIR")" ]; then
echo "Nenhum log encontrado em $LOG_DIR"
exit 0
fi
Use set -e no início para o script parar quando houver erro:
set -e
Teste os caminhos absolutos com:
echo "ARQUIVO_DIR=$ARQUIVO_DIR"
echo "TEMP_DIR=$TEMP_DIR"
Corrija essas duas linhas:
mv "${ARQUIVO_DIR}/log_stats_$(date +%F).txt" "$TEMP_DIR/" (Está "logs", mas o arquivo criado é "log")
tar -czf "${ARQUIVO_DIR}/logs_$(date +%F).tar.gz" -C "$TEMP_DIR" . (A aspa dupla é antes de $)
Confere se você colocou as aspas certinho.
Às vezes o erro é só porque o padrão tá sem aspas ou com aspas invertidas.
Exemplo que funciona:
grep "palavra" arquivo.txt
Lembra que o grep diferencia maiúsculas de minúsculas.
Se você procurar “Erro” mas no arquivo tá “erro”, não vai achar.
Caso queira ignorar isso, usa:
grep -i "erro" arquivo.txt
Se for buscar em diretório, tem que usar -r.
Muita gente esquece disso:
grep -r "texto" .
Se o grep não estiver mostrando nada, tenta testar o padrão isolado.
Tipo:
cat arquivo.txt | grep "parte do texto"
Assim dá pra ver se o problema é o grep ou o padrão mesmo.
Outra coisa comum é errar o nome do arquivo.
Dá um ls antes pra confirmar se o arquivo está no diretório certo