Olá, será que comi bola em algum momento?
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