Existe uma maneira de excluir o subdiretório aninhado especificado por um caminho para esse diretório da pesquisa recursiva grep?

1

Ou eu tenho que usar ack ou find para isso?

Aqui está o que eu quero. Digamos que eu tenha essa estrutura de diretórios:

dir/nesteddir/match.txt
otherdir/nesteddir/match.txt

Como excluo apenas o primeiro aninhado? É possível até mesmo usar o grep? A resposta mais óbvia $ grep -r --exclude-dir="dir/nesteddir" "stringToFind" . parece não funcionar, nem nenhuma das minhas experiências com vários --exclude-dir caminhos usando globbing, levando ./ , etc.

Ler man page e googling não ajudaram, a única menção a esse caso que encontrei é essa: grep --exclude-dir comportamento: um bug ou um recurso?

Concluiu-se que este é um bug introduzido no grep 2.12, mas estou usando a versão mais recente (2.16) e o bugtracker do grep ( link ) não menciona nada relacionado a --exclude-dir , então acho que ele foi corrigido ou é um comportamento intencional.

Seria muito bom obter algum esclarecimento.

    
por Heinlein 19.11.2016 / 14:15

1 resposta

0

O argumento de --exclude-dir é um padrão que é comparado com o nome base de um diretório, ou seja, a parte sem os diretórios pai principais. Por exemplo, --exclude-dir=nesteddir exclui os dois dir/nesteddir e otherdir/nesteddir (e seus subdiretórios).

Não há como excluir um diretório sem excluir outros diretórios com o mesmo nome usando apenas o GNU grep. Você precisa usar um método mais sofisticado de escolher arquivos, por exemplo, o GNU find:

find -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +
    
por 20.11.2016 / 00:38