Enviando o arquivo criado mais recentemente via e-mail

1

Estou tentando enviar um arquivo de log a cada 24 horas ou mais por e-mail. Atualmente estou usando o mutt para isso. Você pode chamar o mutt assim:

mutt -s "Log" -a file_attachment [email protected] 

Sei que posso listar os arquivos criados mais recentemente usando find e mtime, mas quero poder definir uma função bash que localizará o arquivo criado mais recentemente em um diretório e, em seguida, o enviará como um anexo de email.

Como posso conseguir isso?

    
por chubby_monky 07.08.2014 / 03:38

2 respostas

3

com zsh :

mutt -s "Log" -a /path/to/*.log(.om[1]) [email protected]

Que usa zsh qualificadores da glob. Enquanto outros shell globs podem gerar apenas nomes de arquivos baseados em seus nomes, em zsh , você pode usar esses qualificadores ( (.om[1]) acima), para selecionar com base nos atributos de arquivo (tipo, tamanho, horas, permissões ...) ou outros critérios próprios, afetam o pedido, aplicam várias transformações ou selecionam um intervalo.

Nesse caso, usamos esses qualificadores:

  • . : selecione apenas arquivos regulares.
  • om : ordem por hora de modificação (mais recente primeiro)
  • [1] : selecione apenas o primeiro.

Observe que, se não houver arquivos log em /path/to , o glob falhará e o comando será abortado (como seria de se esperar, mas outros shells funcionam de maneira diferente).

GNUly, o equivalente seria algo como:

latest=$(
  find /path/to -maxdepth 1 -name '*.log' -printf '%T@:%p
mutt -s "Log" -a /path/to/*.log(.om[1]) [email protected]
' | sort -rzg | sed -z 's/^[^:]*://;q' ) [ -n "$latest" ] && mutt -s "Log" -a "$latest" [email protected]
    
por 07.08.2014 / 09:02
1
Get_Attachment_Name ()
{
   file_attachment_dir="Whatever you want your directory to be"
   file_attachment='ls -lrt -- "$file_attachment_dir" | grep -v "^[bcdl]"| tail -n 1 | awk '{print $9}''
}

A eliminação de quaisquer linhas de saída que comecem com b, c, d ou l eliminará a tentativa de enviar arquivos especiais de bloco, arquivos especiais de caracteres, diretórios ou links simbólicos.

man ls para ver outros tipos de arquivos que você pode querer excluir da sua saída.

    
por 07.08.2014 / 04:22