如何 grep 某个时间范围内的一组文件?

如何 grep 某个时间范围内的一组文件?

我正在尝试编写一个用于缓冲盒的脚本,该脚本可以对网络流量进行完整的数据包捕获。由于它适用于相当大的网络,我们将捕获的内容分成 100MB 的片段。在网络流量较高的时候,一分钟内我们通常会有多个涵盖该时间段的 pcap。

因此,我想要编写一个 bash 脚本,让正在搜索某些内容的分析师指定日期和时间,以及他们想要在日期和时间前后多少分钟搜索文件。显然,我可以这样做 -

ls -al | grep "Dec  1" | grep 02:00
ls -al | grep "Dec  1" | grep 02:01

等等,获取每个结果并针对我正在寻找的特定关键字分别 grep 每个文件,但我希望能够对在一定时间范围内创建的所有文件进行更广泛的搜索,然后针对每个文件 grep 该关键字。

我不太清楚该如何做,如能得到任何帮助我将非常感激。

答案1

findGNU/Linux 可以为您实现以下一些出色的功能:

单位:

  • n确切地n安蒂斯
  • -n少于n单位
  • +n多于n单位 -

发生了什么:

  • -atime: 上次访问
  • -ctime:更改文件本身(权限、所有者等),而不是其内容
  • -mtime文件的内容已更改
  • -amin nn分钟年龄
  • -atime nn天(24小时)前
  • ctime/min和也一样mtime/min)

因此:

  • find -atime -30→ 最后访问时间不到 30 天
  • find -ctime +5→ 5 天前,文件本身发生更改
  • find -mtime +2 -31→ 文件内容更改时间超过两天但少于 31 天

此外 - -daystart:今天之后,0.00h


查找

find 东西 -exec grep {} \;→;最后一部分( )必不可少 - 注意和{} \;之间的单个空格{}\;

选项-exec允许将其他命令合并到find


还:为什么不应该解析输出ls

答案2

查找 -iname "" -mtime -7 -exec zgrep "" {} \;

例如

查找/opt/WebSphere/AppServer/profiles/application/logs/-iname“SystemOut*”-mtime -7-exec zgrep“FileNotFoundException”{} \;

它将在目录 /opt/WebSphere/AppServer/profiles/application/logs/ 中查找过去 7 天内以 SystemOut 开头的文件,并查找字符串 FileNotFoundException。

相关内容