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


1

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

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

换句话说,如何只在包含以BBB开头的文件的目录中grep output.log文件,而忽略包含以AAA开头的文件的目录中的output.log文件?

注意:目录名称是序号,不能用于确定它们包含的类型文件

Answers:


0

快速伪代码,而无需尝试制作实际的脚本-想要确保我理解这些问题。此外,假定行为良好的文件名(如有必要,请加固最终脚本以处理带有控制字符的文件名等)。

# 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

这样可以使您走上正确的轨道吗?


完美,这正是我需要做的
Noah

1

因为我对问题的性质还不太清楚,所以这是我的建议。

如果目录包含AAA.x12 BBB.x12,但不是两者都包含,并且您想递归地仅对output.log包含以下内容的目录中命名的文件进行grep ,BBB.x12

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


没有为我工作。我应该包括我的系统类型,solaris不支持“ printf”标志进行查找;
挪亚

@Noah,find -type f -name 'BBB.x12' -print | xargs ls -d | grep -d recurse -sinI string --include="output.log"
Nodak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.