Maneira fácil de grep para o texto em um arquivo somente em diretórios contendo um segundo arquivo

1

Contexto:
Nós temos um processo que não está sendo executado corretamente. Ele deve rodar apenas em arquivos com padrões como "AAA * .x12". No entanto, ele também está sendo executado em arquivos semelhantes a "BBB * .x12" Cada diretório contém apenas um tipo de tipo AAA ou um arquivo do tipo BBB. Embora exista um output.log que contenha os dados que estou procurando, ele não contém o nome do arquivo que está sendo processado.

Pergunta: Eu quero grep uma string em um nome de arquivo em um grande número de diretórios. No entanto, só quero ver os diretórios que contêm um segundo arquivo que corresponde a um padrão específico.

Em outras palavras, como posso grep os arquivos output.log apenas nos diretórios que contêm arquivos que começam com BBB e ignorar os arquivos output.log nos diretórios que contêm arquivos que começam com AAA

Nota: Os nomes de diretório são números seqüenciais e não podem ser usados para determinar quais arquivos de tipo eles contêm

    
por Noah 21.02.2015 / 01:49

2 respostas

0

pseudo-código rápido, sem tentar criar um script real - quero ter certeza de que entendi as perguntas. Além disso, suponha que os nomes de arquivos bem comportados (se necessário, reforcem o script final para lidar com nomes de arquivos com caracteres de controle, etc.).

# 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

Isso faz com que você esteja no caminho certo?

    
por 21.02.2015 / 02:53
1

Como ainda não sei bem a natureza da questão, esta é minha opinião.

se um diretório contiver AAA.x12 ou BBB.x12, mas não ambos e você deseja recursivamente grep somente arquivos chamados output.log nos diretórios que contêm BBB.x12

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

    
por 21.02.2015 / 02:23

Tags