Fiz um script para gerar relatórios de algumas atividades específicas que acontecem no meu servidor de arquivos. O arquivo principal se chama report.log - que contém tudo que acontece de forma concatenada - e outro chamado report_anomêsdia.log - que contém apenas o que acontece durante o dia e é criado um novo a cada dia (report_`date +%Y%m%d`.log). Tenho que separar do relatório diário, partes baseado em alguns critérios, o que consegui fazer com o script abaixo de forma bem simples e rápida.
cat $report/$log | while read line
do
photo="${line%_*_*}"
photo="${photo##*_}"
echo $line | grep $photo >> $report/$photo.log
done
Até ai tudo super bem. O problema aconteceu quando acrescentei a parte de envio de mail - como descrito baixo - antes do done.
file=`ls -1 $report/$photo.log | wc -m`
if [ $file -eq 20 ]
then
`mail -s "Subject" mail.server.ext < $report/$photo.log`
elif [ $file -eq 19 ]
then
`mail -s "Subject" mail.server.ext < $report/$photo.log`
.
.
.
fi
Ao invés de ser enviado apenas uma única mensagem com o conteúdo do arquivo gerado, chegam várias mensagem com os pedaços do arquivo. O motivo disso acontecer é bem óbvio, já que está dentro do loop. O problema é como solucionar. §;-)
Usei o wc -m porque cada arquivo gerado pelo script tem nome diferente e já testei e cada um tem uma contagem distinta, mas se tiver outra forma de fazer isso - e que funcione tão bem quanto - estou aberto à sugestões.
Alguém poderia indicar um caminho para fazer o que preciso?