Linux 基于时间戳的grep文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8851667/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
grep files based on time stamp
提问by Kamath
This should be pretty simple, but I am not figuring it out. I have a large code base more than 4GB under Linux. A few header files and xml files are generated during build (using gnu make). If it matters the header files are generated based on xml files.
这应该很简单,但我没有弄清楚。我在 Linux 下有一个超过 4GB 的大型代码库。在构建过程中会生成一些头文件和 xml 文件(使用 gnu make)。如果重要的话,头文件是基于 xml 文件生成的。
I want to search for a keyword in header file that was last modified after a time instance ( Its my start compile time), and similarly xml files, but separate grep queries.
我想在时间实例(它是我的开始编译时间)之后最后修改的头文件中搜索关键字,以及类似的 xml 文件,但单独的 grep 查询。
If I run it on all possible header or xml files, it take a lot of time. Only those that were auto generated. Further the search has to be recursive, since there are a lot of directories and sub-directories.
如果我在所有可能的头文件或 xml 文件上运行它,则需要很多时间。只有那些自动生成的。此外,搜索必须是递归的,因为有很多目录和子目录。
采纳答案by jfs
To find 'pattern'
in all files newer than some_file
in the current directory and its sub-directories recursively:
要'pattern'
在所有比some_file
当前目录及其子目录中更新的文件中递归查找:
find -newer some_file -type f -exec grep 'pattern' {} +
You could specify the timestamp directly in date -d
format and use other find
tests e.g., -name
, -mmin
.
您可以直接在date -d
格式中指定时间戳并使用其他find
测试,例如-name
, -mmin
。
The file list could also be generate by your build system if find
is too slow.
如果find
太慢,文件列表也可以由您的构建系统生成。
More specific tools such as ack
, etags
, GCCSense
might be used instead of grep
.
回答by ovenror
You could use the find
command:
您可以使用以下find
命令:
find . -mtime 0 -type f
prints a list of all files (-type f
) in and below the current directory (.
) that were modified in the last 24 hours (-mtime 0
, 1 would be 48h, 2 would be 72h, ...). Try
打印过去 24 小时内修改过-type f
的当前目录( ) 中和下方的所有文件 ( )的列表.
( -mtime 0
, 1 表示 48h, 2 表示 72h, ...)。尝试
grep "pattern" $(find . -mtime 0 -type f)
回答by stirderAX
Use this. Because if find
doesn't return a file, then grep
will keep waiting for an input halting the script.
用这个。因为如果find
不返回文件,grep
则将继续等待停止脚本的输入。
find . -mtime 0 -type f | xargs grep "pattern"