Найдите файл с диапазоном времени fileA и fileB

Я работаю над сценарием, где я буду получать исходные данные как время и foldername, я должен найти файл (snort.log.*), который падает в том диапазоне времени, что вводит мой пользователь (он будет видеть аварийный файл полужирная метка времени и вводить то время для фактического snort.log. ** файл, который содержит детали нападения и аварийного файла, содержит только метаданные), вот образец каталога

[jump1@widids01 snort-3]# ls -ltr | tail -6
-rwxr-x--- 1 snort snort    301731 Feb  2 18:18 snort.log.1517557015
-rwxr-x--- 1 snort snort   5720853 Feb  5 21:11 snort.log.1517563475
-rwxr-x--- 1 snort snort   3566073 Feb  7 16:00 snort.log.1517832965
-rwxr-x--- 1 snort snort     18999 Feb  7 20:46 snort.log.1518003111
-rwxr-x--- 1 snort snort  20705098 Feb 15 19:00 snort.log.1518004113
-rw------- 1 snort snort    357271 Feb 15 22:22 snort.log.1518688923
-rwxr-x--- 1 snort snort  50782147 Feb 15 22:22 alert
[jump1@widids01 snort-3]# tail -3 alert
02/15-18:22:02.204655   [1:2403380:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 41  [Classification: Misc Attack] [Priority: 2] {TCP} 
02/15-22:22:03.335107   [1:2403408:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 55  [Classification: Misc Attack] [Priority: 2] {TCP} 
02/15-22:22:03.335107   [1:2403408:38412] ET CINS Active Threat Intelligence Poor Reputation IP TCP group 55  [Classification: Misc Attack] [Priority: 2] {TCP}

Я сталкиваюсь с проблемами здесь snort.log.[epoch] т.е. [epoch] сгенерированное время файла, поэтому если пользователь входит

testcase1:

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

как дать ему соответствие snort.log.file поскольку, где данные нападения содержат

testcase2:

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

как дать ему соответствие snort.log.file поскольку, где данные нападения содержат

Я попробовал find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00" Я не получаю надлежащий вывод.

0
задан 17 February 2018 в 14:34

1 ответ

Принятие Вас имеет вход как это:

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

Затем можно преобразовать его в метку времени Unix (секунды с эпохи) и сохранить его в переменной timestamp с:

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

Я использую sed здесь избавиться от time: префикс и изменение двоеточие между датой и временем к T (ISO 8601), date затем используется для преобразования метки времени в секунды с эпохи.

В зависимости от то, что эта метка времени представляет Вас, может затем использовать find производить имя файла журнала:

  • если имя файла уже содержит метку времени, можно использовать snort.log.$time непосредственно

  • если это - время изменения файла:

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

    Это найдет каждый файл журнала со временем изменения между time - 1 секунда и time.

  • если необходимо найти самый старый файл журнала от после данной метки времени, можно использовать sort и head:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • если необходимо найти файл журнала, который (всегда) содержит данную метку времени, использовать grep:

    grep -l $time *
    

    Если у Вас есть много долгих файлов журнала, возможно, комбинируют это с find и/или parallel сделать его быстрее, например:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +
    
1
ответ дан 31 October 2019 в 00:31

Другие вопросы по тегам:

Похожие вопросы: