目前,我使用这个版本的 grep -rlw
grep -rlw . -e "string_to_search"
搜索包含“string_to_search”的整个文件。
我想修改它以查找不超过 7 天的文件。
我该怎么做?
grep -rlw . -e "string_to_search" | find -mtime +7|print
像这样的东西会起作用吗?
答案1
您需要使用find
或zsh
来根据年龄查找要传递到的文件grep
。
find
:find . -mtime -7 -type f -exec grep -lFw string_to_search {} +
zsh
:grep -lFw -- string_to_search **/*(D.m-7)
使用zsh
避免了./
添加到文件路径的前缀并为您提供排序列表,但这意味着我们需要--
(对于非 POSIX grep
,例如 GNUgrep
或兼容)来防止以-
.该zsh
方法可能会达到系统execve()
对参数+环境大小的限制,可以使用zargs
自动加载函数来解决这一问题。
find
使用,sort
和的 GNU 实现xargs
,您还可以避免./
前缀并对列表进行排序:
find . -mtime -7 -type f -printf '%P\0' |
sort -z |
xargs -r0 grep -lFw -- string_to_search
-mtime -7
并m-7
匹配其年龄(基于 mtime)向下舍入为整数天数(在本例中一天为 86400 Unix 秒的持续时间)严格小于 7 的文件。因此,这通常是自同一时间以来最后修改的文件上周(或将来)的同一天,除非时间间隔内 DST 发生变化。
-mtime +7
年龄严格大于 7,因此适用于 8 天(8 * 86400 秒)或更早的文件。