2017-10-05 67 views
1

我已经通过Google和StackOverflow进行了搜索,但似乎无法找到此问题的答案。这可能是因为我在寻找错误的条款,但希望有人能帮忙!Grep以递归方式处理特定子文件夹组中的文件

我有类似下面这样的文件结构:

/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 

每个小时的文件夹中包含从运行该服务的所有主机日志的汇总。那些小时文件夹被汇总到每日文件夹中,这些文件夹被汇总到每月文件夹中等等。然后,日志按阶段(Prod/Demo/Dev)进行汇总,然后再通过服务/子服务进行汇总。

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

理想情况下,如果我想在10月10日12:00的所有服务和子服务中使用所有prod日志,则可以使用以下文件路径:/logs/*/Prod/*/2017/10/01/12/*。但这只适用于每个星号有一个文件夹的情况,实际上可能是第一个星号为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)

+0

感谢GUDO进行初始编辑。我更新了我的问题,以更好地反映我正在尝试做的事情。我确切地知道什么时候发生了我要查找的请求,所以我宁愿不通过不符合那个小时的日志。 –

+0

当然,我只以为你想要解决多个目录首先匹配;看到更新答案,找到路径看起来像你所需要的。 –

+0

感谢GUDO,那正是我所需要的。 –

相关问题