grep在date范围内创build的所有文件内

我在Ubuntu的操作系统。 我想在date范围2012年5月28日至2012年5月30日之间创build的所有日志文件中使用gre词(如XYZ)。

怎么做?

这与Banthar的解决方案有些不同,但是它可以与不支持-newermtfind版本一起工作,并且显示了如何使用xargs命令,这是一个非常有用的工具。

您可以使用find命令来查找“特定时代”的文件。 这将找到5至10天之前修改的所有文件:

  find /directory -type f -mtime -10 -mtime +5 

然后搜索这些文件的字符串:

  find /directory -type f -mtime -10 -mtime +5 -print0 | xargs -0 grep -l expression 

你也可以使用-exec开关,但是我发现xargs更具可读性(它通常也会更好,但在这种情况下可能不会)。

(请注意,这个-0标志是为了让这个命令对带有嵌入空格的文件进行操作,比如this is my filename 。)

在评论中更新问题

当你提供多个表达式来find ,它们被“与”在一起。 例如,如果您要求:

 find . -name foo -size +10k 

find只会返回(a)名为foo (b)大于10kbytes的文件。 同样,如果您指定:

 find . -mtime -10 -mtime +5 

…只会返回比(a)10天前更新的文件,(b)5天前更早的文件。

例如,在我的系统上,它目前是:

 $ date Fri Aug 19 12:55:21 EDT 2016 

我有以下文件:

 $ ls -l total 0 -rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1 -rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2 -rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3 

如果我要求“超过5天前修改的文件( -mtime +5 ),我会得到:

 $ find . -mtime +5 ./file3 ./file2 

但如果我要求“5天以前但不到10天前修改的文件”( -mtime +5 -mtime -10 ),我会得到:

 $ find . -mtime +5 -mtime -10 ./file2 

结合grep和find :

 find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \; 

find似乎没有选择,你可以指定具体的时间戳比较日期(至少我的笔记本电脑上的版本不 – 可能有其他版本和/或其他工具类似的执行),所以你将不得不使用天数。 所以,截至2012年6月5日,你想找到比9天更新但超过6天的文件:

 find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ