查找时间范围为 fileA 和 fileB 的文件

查找时间范围为 fileA 和 fileB 的文件

我正在编写脚本,我将接收时间和文件夹名称作为输入,我需要找到一个文件(snort.log。*),该文件属于我的用户输入的时间范围(他将看到警报文件中的粗体时间戳,并输入实际的 snort.log.** 文件的时间,该文件包含攻击的详细信息,警报文件仅包含元数据)这里是目录示例

[jump1@widids01 snort-3]# ls -ltr | tail -6
-rwxr-x--- 1 snort snort 301731 2月 2 18:18 snort.log.1517557015
-rwxr-x--- 1 snort snort 5720853 2月5日 21:11 snort.log.1517563475
-rwxr-x--- 1 snort snort 3566073 2月7日 16:00 snort.log.1517832965
-rwxr-x--- 1 snort snort 18999 2月7日 20:46 snort.log.1518003111
-rwxr-x--- 1 snort snort 20705098 2月15日 19:00 snort.log.1518004113
-rw------- 1 snort snort 357271 2月15日 22:22 snort.log.1518688923
-rwxr-x--- 1 snort snort 50782147 2月15日 22:22 警报
[jump1@widids01 snort-3]# tail -3 警报
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:并将日期和时间之间的冒号更改为TISO 8601),date然后用于将时间戳转换为自纪元以来的秒数。

根据此时间戳所代表的内容,您可以使用它find来输出日志的文件名:

  • 如果文件名已经包含时间戳,则可以snort.log.$time直接使用

  • 如果是文件的修改时间:

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

    这将找到修改时间在time-1 秒到之间的每个日志文件time

  • 如果您需要查找给定时间戳之后最旧的日志文件,则可以使用sorthead

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • 如果你需要找到日志文件(以任何方式)包含给定的时间戳,使用grep

    grep -l $time *
    

    如果您有很多长日志文件,可以将其与findand/or结合parallel起来以加快速度,例如:

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

相关内容