Selecione o arquivo atualizado mais recente do diretório e envie-o por e-mail

0

Eu quero selecionar o último arquivo de log (timestamp) .log de algum diretório e enviá-lo via e-mail como anexo. O que estou tentando é:

Nome do arquivo: abc.sh

echo 'An error occured' | mutt -s "Logs" -a '/xx/xx/logs/xx/*.log(.om[1])' -e 'my_hdr From:[email protected]' -- [email protected]
    
por Brinda 07.07.2015 / 22:41

1 resposta

2

Solução Naive

Assumirei que seus logs possuem nomes de arquivos que correspondem ao glob /xx/xx/logs/xx/*.log e que você deseja enviar e-mails para [email protected]

newest=$(ls -rt /xx/xx/logs/xx/*.log | tail -n 1)
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

Essa abordagem funciona se os arquivos tiverem nomes bem comportados. Em geral, porém, analisar a saída de ls não é confiável.

Solução mais confiável

Isso evita usar ls e será seguro para todos os nomes de arquivos:

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

Testando para ver qual arquivo está selecionado

Para ver qual arquivo é o mais novo, sem enviá-lo por e-mail, execute:

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo "newest file is $newest"
    
por 07.07.2015 / 23:04