Supondo que você tenha uma entrada assim:
time="time:2015-02-15-18:22:02"
Depois, você pode convertê-lo em um carimbo de data / hora Unix (segundos desde a época) e salvá-lo na variável timestamp
com:
time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/T/') +%s)
Eu uso sed
aqui para me livrar do prefixo time:
e altero o cólon entre a data e a hora para T
( ISO 8601 ), date
é então usado para converter o registro de data e hora em segundos desde a época.
Dependendo do que esse timestamp representa, você pode usar find
para gerar o nome do arquivo do log:
-
se o nome do arquivo já contiver o timestamp, você poderá usar
snort.log.$time
diretamente -
se for a hora da modificação do arquivo:
find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
Isso localizará todos os arquivos de log com um tempo de modificação entre
time
- 1 segundo etime
. -
se você precisar encontrar o arquivo de log mais antigo depois do carimbo de data e hora especificado, use
sort
ehead
:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
-
se você precisar encontrar o arquivo de log que (de qualquer forma) contém o registro de data e hora especificado, use
grep
:grep -l $time *
Se você tiver muitos arquivos de log longos, combine isso com
find
e / ouparallel
para torná-lo mais rápido, por exemplo:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +