【问题标题】:Grep Recursively for files in specific group of sub folders递归地对特定子文件夹组中的文件进行 Grep
【发布时间】:2017-10-05 23:01:32
【问题描述】:

我已经通过 Google 和 StackOverflow 进行了搜索,但似乎无法找到这个问题的答案。可能是因为我搜索的术语有误,但希望有人能提供帮助!

我有以下类似的文件结构:

/logs/ServiceA/Prod/2017/10/01/11/logFileForHour
/logs/ServiceA/Prod/2017/10/01/12/logFileForHour
/logs/ServiceA/Prod/2017/10/01/13/logFileForHour
/logs/ServiceB/SubService1/Prod/2017/10/01/12/logFileForHour
/logs/ServiceC/SubService1/Prod/Mirror/2017/10/01/12/logFileForHour
/logs/ServiceC/SubService1/Beta/2017/10/01/12/logFileForHour

每小时的文件夹包含来自运行该服务的所有主机的日志汇总。那些小时文件夹被聚合到每日文件夹中,这些文件夹被聚合到每月文件夹中等等。然后日志由 Stage (Prod/Demo/Dev) 聚合,然后由 Service/SubService 进一步聚合。

我需要一种方法来 grep 跨所有 PROD 服务和子服务的通用标识符,并且希望尽可能使用单个 grep 来执行此操作。我知道提出请求的时间。

理想情况下,如果我想要在 2017 年 10 月 10 日 12:00 期间来自所有服务和子服务的所有产品日志,我可以使用以下文件路径:/logs/*/Prod/*/2017/10/01/12/*,但这仅适用于存在每个星号所在的单个文件夹,而实际上第一个星号可能是 1 个或多个文件夹,第二个星号可能是 0 个或多个文件夹。

如果大家能提供任何帮助,我们将不胜感激!

【问题讨论】:

    标签: linux grep


    【解决方案1】:

    您可以尝试以下方法:

    find logs -type d -name Prod | xargs grep -r SEARCHSTRING
    

    但请注意我无法测试它...

    澄清后编辑:

    find logs -type f -path '*/Prod/*' -a -path '*/2017/10/01/12/*'
    

    也就是说,查找与Prod 匹配并与您要查找的日期/小时路径匹配的路径的所有文件后代(添加 grep)

    【讨论】:

    • 感谢 GUDO 的初始编辑。我已经更新了我的问题,以更好地反映我正在尝试做的事情。我确定我正在寻找的请求发生在什么时间,所以我宁愿不通过不对应于该时间的日志进行 grep。
    • 当然,我只是想你是想先解决多个要匹配的目录;查看更新答案,find -path 看起来像你需要的。
    • 感谢 GUDO,这正是我所需要的。
    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 2018-10-16
    • 2021-03-04
    • 2020-01-13
    • 2012-11-19
    • 2021-01-29
    • 2013-02-03
    相关资源
    最近更新 更多