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

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

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

[jump1@widids01 snort-3]# ls -ltr | tail -6
-rwxr-x--- 1 фырканье фырканье 301731 2 фев 18:18 фырканье.log.1517557015
-rwxr-x--- 1 фырканье фырканье 5720853 5 фев 21:11 фырканье.log.1517563475
-rwxr-x--- 1 хрюканье хрюканье 3566073 7 фев 16:00 хрюканье.log.1517832965
-rwxr-x--- 1 фырканье фырканье 18999 7 фев 20:46 фырканье.log.1518003111
-rwxr-x--- 1 фырканье фырканье 20705098 15 фев 19:00 фырканье.log.1518004113
-rw------- 1 фырканье фырканье 357271 15 фев 22:22 фырканье.log.1518688923
-rwxr-x--- 1 фырканье фырканье 50782147 15 фев 22:22 оповещение
[jump1@widids01 snort-3]# tail -3 alert
02/15-18:22:02.204655   [1:2403380:38412] ET CINS Активная разведка угроз Плохая репутация IP TCP группа 41 [Классификация: Разные атаки] [Приоритет: 2] {TCP} 
02/15-22:22:03.335107 [1:2403408:38412] ET CINS Активная разведка угроз Плохая репутация IP TCP группа 55 [Классификация: Разные атаки] [Приоритет: 2] {TCP} 
02/15-22:22:03.335107   [1:2403408:38412] ET CINS Активная разведка угроз Плохая репутация IP TCP группа 55 [Классификация: Разные атаки] [Приоритет: 2] {TCP}

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

тестовый пример1:

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

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

тестовый пример2:

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"не получаю должного результата.

решение1

Предположим, у вас есть такие входные данные:

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

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

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

Я использую sedздесь, чтобы избавиться от time:префикса и изменить двоеточие между датой и временем на T(ИСО 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 {} +
    

Связанный контент