Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在特定时间范围内grep一组文件_Linux_Bash_Unix_Grep - Fatal编程技术网

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

Linux 如何在特定时间范围内grep一组文件,linux,bash,unix,grep,Linux,Bash,Unix,Grep,我正在尝试编写一个用于缓冲盒的脚本,它可以捕获网络流量的完整数据包。由于它是一个相当大的网络,我们将捕获分成100MB的段。在一分钟内经常出现高网络流量时,我们将有多个PCAP覆盖该时段 所以我想做的是有一个bash脚本,让正在搜索某物的分析员指定一个日期和时间,以及他们想要搜索文件的时间。显然,我可以做这样的事情- ls -al | grep "Dec 1" | grep 02:00 ls -al | grep "Dec 1" | grep 02:01 以此类推,获取每个结果并分别为我要

我正在尝试编写一个用于缓冲盒的脚本,它可以捕获网络流量的完整数据包。由于它是一个相当大的网络,我们将捕获分成100MB的段。在一分钟内经常出现高网络流量时,我们将有多个PCAP覆盖该时段

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

ls -al | grep "Dec  1" | grep 02:00
ls -al | grep "Dec  1" | grep 02:01
以此类推,获取每个结果并分别为我要查找的特定关键字对每个文件进行grep,但我希望能够对在某个时间范围内创建的所有文件进行更广泛的搜索,然后为关键字对每个文件进行grep


我不完全确定如何做到这一点,任何帮助都将不胜感激。

使用
-cmin
-ctime
参数查看
查找

所以


,将找到以“.log”结尾的文件,这些文件在30天前修改过,但不到90天,然后通过
grep
运行所述文件,查找“plasma”一词。

假设您希望20131130从0100到0130- 这与查找有关:

touch -t 201311300100 dummy1
touch -t 201311300130 dummy2 
find /path/to/logs type -f \( -newer dummy1 -a ! -newer dummy2 \) -name '*.log'
201311300100位是一个触摸时间串。因为UNIX标签,我发布了我所知道的最普通的版本

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

我想要的是一个分析师在12月1日上午11:00说 关键词“foo”搜索5分钟左右。剧本应该 查找在上午10:55到11:05之间创建的所有文件,并对其进行grep 关键词“foo”

此脚本使用
touch-d
创建带有时间范围开始和结束时间戳的临时文件,因为较旧版本的
find
仅具有
-newer
选项,而不是
-newermt
,并且
touch-d
方便地允许使用给定的时间规范(只需很少修改)随着分钟数的调整。使用
sed
对给定日期进行必要的修改,包括移动月后的第二天,删除后缀st或nd以及单词at

read-p'date和time:'dat
读取-p'+/-minutes:'min
read-p'keyword:'键

dat=`sed's/\([0-9]\+\)\(st\\\ nd\\ rd\\ th\\\)\([^]*\)/\3\1/;s/at/'您想要某个时间范围内的文件,还是想要在文件中登录?
find
是您的朋友,具有
-ctime
-newer
和/或
-mtime
等选项。这是一个很受欢迎的习惯用法,它可以根据一些标准抓取一堆文件,然后对它们进行处理。我想让一位分析师在12月1日上午11:00说,并在两边搜索5分钟,关键字是“foo”。脚本应该找到在上午10:55到11:05之间创建的所有文件,并在其中添加关键字“foo”可能的重复项:如果您不打算提供更完整的答案,那么这应该是一个注释。我已经对此进行了研究,但我不想回头看X分钟,我需要查找特定日期和2次之间的文件。请参阅我上面的评论-maxdepth 1-newermt“2013-10-28 00:00:00”-newermt“2013-10-29 00:00:00”
find . -maxdepth 1 -newermt "2013-10-28 00:00:00" ! -newermt "2013-10-29 00:00:00"
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