2012-01-13 92 views
6

这应该很简单,但我没有搞清楚。我在Linux下有一个超过4GB的大代码库。构建期间会生成一些头文件和xml文件(使用gnu make)。如果重要的话,头文件是基于xml文件生成的。基于时间戳的grep文件

我想在一个时间实例(它是我的开始编译时间)之后最后修改的头文件中搜索关键字,以及类似的xml文件,但单独的grep查询。

如果我在所有可能的头文件或xml文件上运行它,它会花费很多时间。只有那些是自动生成的。此外,搜索必须是递归的,因为有很多目录和子目录。

+0

您可能想要包含当前命令的示例。节省我们指出你已经知道的明显东西的麻烦。 – sehe 2012-01-13 15:12:02

回答

11

要在所有文件中找到'pattern'更新比some_file在当前目录及其子目录递归:

find -newer some_file -type f -exec grep 'pattern' {} + 

你可以在date -d格式直接指定时间戳记,并使用其他find测试如,-name-mmin

如果find太慢,文件列表也可能由您的构建系统生成。

更具体的工具,如acketagsGCCSense可能被用来代替grep

+0

谢谢,我遇到了比回答更有价值的东西。我从未遇到过GCCSense。我正在寻找vim中的eclipse代码补全功能。猜猜它最近开发的。 – Kamath 2012-01-16 05:09:15

+0

为什么地球上有一个“新手”标志,但不是“ - ol”标志? – Guillochon 2016-05-14 16:12:35

+2

@Guillochon:['! -newer'](http://stackoverflow.com/q/13838845/4279) – jfs 2016-05-14 16:17:06

11

您可以使用find命令:

find . -mtime 0 -type f 

并在过去的24小时(-mtime 0进行了修改,当前目录(.)所示打印所有文件(-type f)的列表,1人48小时,2将是72小时,...)。尝试

grep "pattern" $(find . -mtime 0 -type f) 
+0

真棒解答,在CentOS 5.6上运行良好。 – crmpicco 2013-12-09 10:06:30

1

使用此。因为如果find没有返回文件,则grep将继续等待输入暂停脚本。

find . -mtime 0 -type f | xargs grep "pattern"