grep -rlw 但仅适用于 7 天以上的文件?

grep -rlw 但仅适用于 7 天以上的文件?

目前,我使用这个版本的 grep -rlw

grep -rlw . -e "string_to_search"

搜索包含“string_to_search”的整个文件。

我想修改它以查找不超过 7 天的文件。

我该怎么做?

grep -rlw . -e "string_to_search" | find -mtime +7|print

像这样的东西会起作用吗?

答案1

您需要使用findzsh来根据年龄查找要传递到的文件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 -7m-7匹配其年龄(基于 mtime)向下舍入为整数天数(在本例中一天为 86400 Unix 秒的持续时间)严格小于 7 的文件。因此,这通常是自同一时间以来最后修改的文件上周(或将来)的同一天,除非时间间隔内 DST 发生变化。

-mtime +7年龄严格大于 7,因此适用于 8 天(8 * 86400 秒)或更早的文件。

相关内容