【问题标题】:How to search for string in files whose name contains another string and are created in last 7 days in linux?如何在名称包含另一个字符串且在 Linux 中最近 7 天创建的文件中搜索字符串?
【发布时间】:2013-03-16 07:17:42
【问题描述】:

我想在名称包含另一个字符串且在过去 7 天内创建的文件中搜索字符串,

我试过了:

find . -type f -name '*name_string*' -mtime -7 | grep -ir '*mytext*'

但是没用,

请帮忙

【问题讨论】:

  • 描述“它不起作用”
  • 它不起作用 = 它没有找到任何文件。
  • -mtime 不会为您提供文件的创建时间。

标签: linux string grep find


【解决方案1】:

你真的很接近但错过了xargs,否则find的输出只是一堆用于grep的文本。

find . -type f -name '*name_string*' -mtime -7 | xargs grep -i 'mytext'

通过使用xargs,您可以将文件列表作为grep 应该搜索字符串mytext 的文件集传递。

顺便说一句,您可以只使用mytext 而不是*mytext*

如果您想搜索多个模式,请在包含name_string 的文件名列表中说pattern1pattern2

find . -type f -name '*name_string*' -mtime -7 -print0 | while read -d $'\0' f; do
    grep -qi pattern1 "$f" && grep -li pattern2 "$f"
done

这应该适用于包含空格的文件名。

【讨论】:

  • 好的,我搜索包含 2 个字符串且条件相同的文件怎么样?我的意思是:find . -type f -name '*name_string*' -mtime -7 | xargs grep -i '*mytext_1*' AND '*mytext_2*'
  • 你应该能够使用扩展的正则表达式语法来做到这一点,使用 -Egrep。您希望 2 个字符串在文件的同一行中还是可以在文件中的任何位置?
  • 可以在文件中的任何位置。
  • @alwbtc - 更新了答案
【解决方案2】:

无需 xargs 或其他非标准扩展名即可获得良好的文件名处理:

find . -type f -name '*name_string*' -mtime -7 -exec grep -i 'mytext' {} \;

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多