Encontre o arquivo com intervalo de tempo fileA e fileB

Encontre o arquivo com intervalo de tempo fileA e fileB

Estou trabalhando em um script onde receberei entradas como hora e nome da pasta, preciso encontrar um arquivo (snort.log.*) que esteja nesse intervalo de tempo que meu usuário inserir (ele verá o arquivo de alerta em negrito registro de data e hora e inserção dessa hora para o arquivo snort.log.** real que contém os detalhes do ataque e o arquivo de alerta contém apenas os metadados) aqui está um exemplo de diretório

[jump1@widids01 snort-3]#ls -ltr | cauda -6
-rwxr-x--- 1 bufo bufo 301731 2 de fevereiro 18:18 snort.log.1517557015
-rwxr-x--- 1 bufo bufo 5720853 5 de fevereiro 21:11 snort.log.1517563475
-rwxr-x--- 1 bufo bufo 3566073 7 de fevereiro 16:00 snort.log.1517832965
-rwxr-x--- 1 snort snort 18999 7 de fevereiro 20:46 snort.log.1518003111
-rwxr-x--- 1 snort snort 20705098 15 de fevereiro 19:00 snort.log.1518004113
-rw------- 1 bufar bufar 357271 15 de fevereiro 22:22 bufar.log.1518688923
-rwxr-x--- 1 bufo bufo 50782147 15 de fevereiro 22:22 alerta
[jump1@widids01 snort-3]# alerta tail -3
15/02-18:22:02.204655   [1:2403380:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 41 [Classificação: Ataque diverso] [Prioridade: 2] {TCP} 
15/02-22:22:03.335107 [1:2403408:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 55 [Classificação: Ataque diverso] [Prioridade: 2] {TCP} 
15/02-22:22:03.335107   [1:2403408:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 55 [Classificação: Ataque diverso] [Prioridade: 2] {TCP}

Estou enfrentando os problemas aqui, snort.log.[epoch]ou seja [epoch], o tempo de geração do arquivo, portanto, se o usuário inserir

caso de teste1:

time:2015-02-15-22:28:02 

como fornecer a ele a correspondência snort.log.filede onde os dados do ataque contêm

caso de teste2:

time:2015-02-15-18:22:02

como fornecer a ele a correspondência snort.log.filede onde os dados do ataque contêm

Eu tentei com find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"não estou obtendo resultado adequado.

Responder1

Supondo que você tenha uma entrada como esta:

time="time:2015-02-15-18:22:02"

Então você pode convertê-lo para um carimbo de data/hora Unix (segundos desde a época) e salvá-lo em uma variável timestampcom:

time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)

Eu uso sedaqui para me livrar do time:prefixo e alterar os dois pontos entre data e hora para T(ISO 8601), dateé então usado para converter o carimbo de data/hora em segundos desde a época.

Dependendo do que esse carimbo de data/hora representa, você pode usar findpara gerar o nome do arquivo do log:

  • se o nome do arquivo já contém o carimbo de data/hora, você pode usar snort.log.$timediretamente

  • se for a hora de modificação do arquivo:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
    

    Isso encontrará todos os arquivos de log com um tempo de modificação entre time-1 segundo e time.

  • se você precisar encontrar o arquivo de log mais antigo após o carimbo de data/hora fornecido, poderá usar sorte head:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • se você precisar encontrar o arquivo de log que (de alguma forma)contémo carimbo de data/hora fornecido, use grep:

    grep -l $time *
    

    Se você tiver muitos arquivos de log longos, talvez combine isso com finde/ou parallelpara torná-lo mais rápido, por exemplo:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +
    

informação relacionada