Valide o timestamp Unix usando BASH

1

Meu google-fu falhou, então espero que alguém aqui possa me apontar na direção certa. Eu estou no meio de fazer alguns esforços de validação de dados e suspeito que o sistema está gravando algumas datas inválidas no formato unix epoch (segundos desde a época). Existe uma maneira fácil no bash, dados que se parecem com 1357853083 (segundos desde a época do unix) para determinar se é um timestamp unix válido ou não? O ideal é que eu esteja procurando carimbos de data e hora que não possam ser convertidos para uma data legível por humanos, bem como carimbos de data e hora que possam ser renderizados para uma data futura maior que a data atual.

Eu compilei essa monstruosidade que converte coisas em uma data legível por humanos, mas não consigo descobrir como fazer com que ela encontre datas inválidas.

$ grep "delimiter" * | grep -v "delimiter2" | awk -F"," '{print $2}' | awk -F":" '{print $2}' | awk -F"*" '{print $1}' | awk '{printf("%s", strftime("%Y.%m.%d ",$1)); printf("%s", strftime("%H:%M:%S \n",$1))}' | sort -V
    
por FloppyDisk 10.01.2013 / 23:07

1 resposta

3

Então parece que você quer fazer dois testes.

  1. Verifique se há um número de hora válido para a época, que seria de -2147483648 a 2147483647 ou + -9.22337203685478E18, dependendo de seu sistema usar 32 ou 64 bits por vez.
  2. Você deseja verificar um número menor que a data de hoje.

Portanto, combinando os dois testes, você está procurando números no intervalo de -2147483648 até a data de hoje no horário da época. O código abaixo deve fazer o que você deseja, embora eu possa aumentar o limite inferior para uma data de hora razoável, como a data em que o computador foi instalado ou o sistema operacional compilado. Eu arbitrariamente definir o limite inferior para 0 segundos ou 1/1/1970.

#$i stores the value being tested
#returns failed if it fails validation, otherwise it returns passed
if [ $i -le 0 -o $i -gt 'date +%s' ]; then echo "failed"; else echo "passed"; fi;
    
por 11.01.2013 / 00:14