Grep递归地处理特定子文件夹组中的文件

时间:2017-10-05 23:01:32

标签: linux grep

我已经通过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个或更多个文件夹。

非常感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

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

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

澄清后编辑:

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

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