Buscar archivo con rango de tiempo archivoA y archivoB

Buscar archivo con rango de tiempo archivoA y archivoB

Estoy trabajando en un script donde recibiré entradas como hora y nombre de carpeta. Necesito encontrar un archivo (snort.log.*) que se encuentre en ese rango de tiempo que ingresa mi usuario (verá el archivo de alerta en negrita). marca de tiempo e ingresando esa hora para el archivo snort.log.** real que contiene los detalles del ataque y el archivo de alerta contiene solo los metadatos) aquí hay un ejemplo de directorio

[jump1@widids01 snort-3]# ls -ltr | cola -6
-rwxr-x--- 1 resoplido resoplido 301731 2 de febrero 18:18 snort.log.1517557015
-rwxr-x--- 1 resoplido resoplido 5720853 5 de febrero 21:11 snort.log.1517563475
-rwxr-x--- 1 resoplido resoplido 3566073 7 de febrero 16:00 snort.log.1517832965
-rwxr-x--- 1 resoplido snort 18999 7 de febrero 20:46 snort.log.1518003111
-rwxr-x--- 1 resoplido resoplido 20705098 15 de febrero 19:00 snort.log.1518004113
-rw------- 1 resoplido resoplido 357271 15 de febrero 22:22 snort.log.1518688923
-rwxr-x--- 1 resoplido resoplido 50782147 15 de febrero 22:22 alerta
[jump1@widids01 snort-3]# cola -3 alerta
15/02-18:22:02.204655   [1:2403380:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 41 [Clasificación: Ataque varios] [Prioridad: 2] {TCP} 
15/02-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 55 [Clasificación: Ataque varios] [Prioridad: 2] {TCP} 
15/02-22:22:03.335107   [1:2403408:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 55 [Clasificación: Ataque varios] [Prioridad: 2] {TCP}

Estoy enfrentando problemas aquí, snort.log.[epoch]es decir [epoch], el tiempo de generación del archivo, por lo que si el usuario ingresa

caso de prueba1:

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

cómo darle la coincidencia snort.log.filede dónde contienen los datos del ataque

caso de prueba2:

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

cómo darle la coincidencia snort.log.filede dónde contienen los datos del ataque

Lo intenté y find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"no obtengo el resultado adecuado.

Respuesta1

Suponiendo que tenga una entrada como esta:

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

Luego puedes convertirlo a una marca de tiempo Unix (segundos desde la época) y guardarlo en una variable timestampcon:

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

Utilizo sedaquí para deshacerme del time:prefijo y cambiar los dos puntos entre fecha y hora a T(ISO 8601), dateluego se usa para convertir la marca de tiempo a segundos desde la época.

Dependiendo de lo que represente esta marca de tiempo, puede usarla findpara generar el nombre de archivo del registro:

  • Si el nombre del archivo ya contiene la marca de tiempo, puede usarla snort.log.$timedirectamente.

  • si es la hora de modificación del archivo:

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

    Esto encontrará todos los archivos de registro con un tiempo de modificación entre time-1 segundo y time.

  • Si necesita encontrar el archivo de registro más antiguo posterior a la marca de tiempo dada, puede usar sorty head:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • si necesita encontrar el archivo de registro que (de cualquier manera)contienela marca de tiempo dada, use grep:

    grep -l $time *
    

    Si tiene muchos archivos de registro largos, puede combinarlos con findy/o parallelhacerlo más rápido, por ejemplo:

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

información relacionada