仅在包含第二个文件的目录中对一个文件中的文本进行 grep 的简单方法

仅在包含第二个文件的目录中对一个文件中的文本进行 grep 的简单方法

背景:
我们有一个进程运行不正确。它应该只在具有“AAA*.x12”等模式的文件上运行。但是,它也在类似于“BBB*.x12”的文件上运行。每个目录仅包含一个 AAA 类型或 BBB 类型的文件。虽然有一个 output.log 包含我正在寻找的数据,但它不包含正在处理的文件的名称。

问题: 我想在大量目录中查找文件名中的字符串。但是,我只想查看包含与特定模式匹配的第二个文件的目录。

换句话说,我怎样才能仅在包含以 BBB 开头的文件的目录中 grep output.log 文件,而忽略包含以 AAA 开头的文件的目录中的 output.log 文件

笔记:目录名称是连续的数字,不能用于判断其包含的文件类型

答案1

快速伪代码,无需尝试编写实际脚本——希望确保我理解问题。此外,假设文件名行为良好(如有必要,增强最终脚本以处理带有控制字符的文件名等)。

# get output.log files in directories containing BBB file and search output.log
find /start -name 'BBB*' -type f -print |\
while read f; do echo $(dirname $f)/output.log; done |\
xargs grep search-string

这是否让你走上正确的道路?

答案2

因为我对这个问题的性质仍然有点不清楚,所以这是我的赌注。

如果目录包含 AAA.x12或者BBB.x12,但不能同时使用你想递归地 grep仅有的output.log包含以下内容的目录中命名的文件BBB.x12

find -type f -name 'BBB.x12' -printf '%h\n' | grep -d recurse -sinI string --include="output.log"

相关内容