Como obter resultados parecidos com o "grep -isrl" para arquivos em subpastas análogas?

0

Estou trabalhando com um determinado framework que possui módulos com convenções consistentes de nomenclatura de pastas. Gostaria de recuperar todos os arquivos que contêm a string parcial foo de um diretório de alto nível, mas quero apenas resultados de arquivos com um caminho que contenha um diretório chamado Bar . Para elaborar: a partir do diretório raiz do projeto, geralmente há quatro níveis de subpastas, contendo um número arbitrário de subpastas e arquivos de texto todos .php). Os subdiretórios nos quais gostaria de pesquisar / dos quais gostaria de obter resultados contêm uma pasta pai chamada Bar .

Em relação à minha experiência limitada: gostaria de um comando como grep -isrl 'foo' ./ e receber apenas resultados como

./A/B/C/Bar/D/F/Some.php
./G/H/I/Bar/Some.php

e excluindo

./A/B/C/Baz/D/F/Some.php
./G/H/I/Baz/Some.php

Essencialmente, suponho que exista algo como grep -isrl 'foo' ./*/Bar/*.php , em que * corresponderá a subdiretórios zero-para-muitos.

    
por benmarks 16.07.2012 / 15:28

1 resposta

1

Um caminho:

find <search path> -type d -name 'Bar' -exec grep -r foo {} +

(sem o GNU find, substitua + por \; ).

Desta forma, primeiro encontrará os diretórios que são denominados Bar e, em seguida, recursivamente grep apenas nestes.

Para limitar a pesquisa a arquivos PHP:

find <search path> -type d -name 'Bar' -exec grep -r --include '*.php' foo {} +

Isso também pode ser feito com o shell globbing, mas isso depende de qual shell você está usando (obviamente).

EDITAR: Adicionando um exemplo de Bash:

shopt -s globstar
grep -r test <search path>/**/Bar/
    
por 16.07.2012 / 16:34

Tags