查找文件中包含匹配 TODO 且不到 1 周的文件

查找文件中包含匹配 TODO 且不到 1 周的文件

我的不成功的提议

find ./ -newerct '1 week ago' -print | grep TODO

尽管应该有,但没有输出。

文件是文本文件,例如

Lorem
% TODO check this out
Lorem ipsun

如何找到与 TODO 匹配的不到 1 周的文件? 输出应该是 TODO 之后的行。 Perl 解决方案也很受欢迎,因为我也在练习它。

答案1

改变这个:

find ./ -newerct '1 week ago' -print | grep TODO

对此:

find ./ -newerct '1 week ago' -exec grep TODO {} +

或这个:

find ./ -newerct '1 week ago' -print | xargs grep TODO

解释

grep不会将 的输出解释find为要搜索的文件列表,而是将其解释为输入。也就是说,尝试grep匹配TODO名字文件而不是它们的内容

grep(1)手册页:

grep 搜索命名的输入文件(如果没有命名文件,或者给出单个连字符减号 (-) 作为文件名,则搜索标准输入)

要匹配之后的行TODO

find ./ -newerct '1 week ago' -exec grep -A1 TODO {} + | grep -v TODO

这假设您有 GNU grep

答案2

你可以使用它:

find ./ -type f -newerct '1 week ago' -exec sh -c "grep -H -A1 TODO {} | tail -1" \;

解释:

  • -type f:仅包含搜索模式中的文件
  • -exec sh -c "...":对所有找到的文件执行...
  • grep -H -A1 TODO {} | tail -1-H打印文件名,-A1打印匹配后的行,并tail -1从输出中删除第一行(包含 TODO 的行)。

答案3

尝试这个

find . -type f -ctime -7 -print | grep -R "TODO" /etc/

-type f -键入 f 仅列出文件

-ctime -7适用于创建时间少于 7 天的文件

相关内容