1

Фон:
У нас есть процесс, который не работает правильно. Предполагается, что он будет работать только с файлами с такими шаблонами, как "AAA * .x12". Однако он также работает с файлами, похожими на «BBB * .x12». Каждый каталог содержит только тип файла типа AAA или файл типа BBB. Хотя есть файл output.log, содержащий данные, которые я ищу, он не содержит имя обрабатываемого файла.

Вопрос: я хочу получить строку в имени файла в большом количестве каталогов. Однако я хочу посмотреть только на каталоги, которые содержат второй файл, соответствующий определенному шаблону.

Другими словами, как я могу grep файлы output.log только в каталогах, которые содержат файлы, начинающиеся с BBB, и игнорировать файлы output.log в каталогах, которые содержат файлы, начинающиеся с AAA

Примечание: имена каталогов являются последовательными числами и не могут использоваться для определения, какие типы файлов они содержат

2 ответа2

1

Поскольку я все еще немного неясен относительно характера вопроса, это мой вопрос.

если каталог содержит 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"

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

Получается ли это на правильном пути?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .