如何在特定时间范围内grep一组文件

时间:2013-12-01 02:25:43

标签: linux bash unix grep

我正在尝试编写一个缓冲区上使用的脚本,该缓冲区可以完全捕获网络流量。由于它是一个相当大的网络,我们将捕获分成100MB段。在高网络流量的情况下,通常超过一分钟的时间,我们将有多个pcaps覆盖那段时间。

所以我想做的是有一个bash脚本,让搜索某事物的分析师可以指定日期和时间以及他们想要搜索文件的任何一侧的分钟数。显然我可以做这样的事情 -

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

依此类推,获取每个结果并为我正在寻找的特定关键字单独grep每个文件,但我希望能够对在一个时间范围内创建的所有文件进行更广泛的搜索,然后每个他们是关键字。

我不完全确定如何做到这一点,任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:1)

find . -maxdepth 1 -newermt "2013-10-28 00:00:00" ! -newermt "2013-10-29 00:00:00"

答案 1 :(得分:1)

  

我想要的是分析师在12月1日上午11:00用a表示   关键词" foo"在任何一方搜索5分钟。脚本应该   找到上午10:55到11:05之间创建的所有文件并为它们grep   关键字" foo"

此脚本使用find创建时间范围开头和结尾的时间戳的临时文件,因为-newer的旧版本只有-newermt选项,而不是{{} 1}}和touch -d方便地允许使用给定的时间规范(几乎没有修改)和分钟调整。使用sed对给定日期进行必要的修改,包括在一个月后移动一天,并删除后缀 st nd 以及单词

read -p'date and time: ' dat
read -p'+/- minutes: ' min
read -p'keyword: ' key
dat=`sed 's/\([0-9]\+\)\(st\|nd\|rd\|th\|\) \([^ ]*\)/\3 \1/; s/at //' <<<$dat`
touch -d"$dat $min min" /tmp/to
touch -d"$dat -$min min" /tmp/from
find . -type f -newer /tmp/from ! -newer /tmp/to | xargs grep "$key"
rm /tmp/from /tmp/to

答案 2 :(得分:0)

使用find-cmin参数查看-ctime

所以,

find -iname "*.log" -mtime +30 -mtime -90 -exec grep plasma {} \;

,会找到以&#34; .log&#34;结尾的文件修改时间超过30天,但不到90天,然后通过grep运行所述文件,寻找&#34; plasma&#34;。

答案 3 :(得分:0)

假设您想要从0100到0130的20131130 - 这样就可以找到:

touch -t 201311300100 dummy1
touch -t 201311300130 dummy2 
find /path/to/logs type -f \( -newer dummy1 -a ! -newer dummy2 \) -name '*.log'

201311300100位是触摸时间串。由于UNIX标签,我发布了我认识的最普通版本。