Exclui subdiretórios ocultos do grep -r

14

Eu tenho uma cópia local svn, eu quero fazer uma pesquisa na string some_string.

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

Mas se for um pouco mais longe, parece que os diretórios ocultos de primeiro nível são excluídos:

$ cd lang && grep some_string * -r
en:some_string=Some string

Como posso remover os svn diretórios ocultos da minha saída, e não apenas do primeiro nível de profundidade?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string
    
por MUY Belgium 01.10.2014 / 16:09

2 respostas

16

Use a opção --exclude-dir , por exemplo:

grep -r --exclude-dir='.*' some_string

De man grep :

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

Note, entretanto, que a opção --exclude-dir está disponível apenas no GNU grep. Se o grep não der suporte, talvez seja necessário usar outra ferramenta como encontrar por exemplo :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;
    
por 01.10.2014 / 16:13
1

Eu normalmente uso isso:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./} removerá o primeiro ./ e, em seguida, grep removerá tudo o que começar com um ponto.

    
por 23.02.2017 / 15:04