Excluir subdiretórios ocultos do grep -r


22

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 foram excluídos:

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

Como posso remover os diretórios svn 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

Não é uma resposta direta, mas você pode tentar aceitar .
depquid 1/10/10

Respostas:


21

Use a --exclude-diropção, por exemplo:

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

De man grep:

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

Note, no entanto, que esta --exclude-diropção está disponível apenas no GNU grep. Se o seu grepnão o suportar, pode ser necessário usar outra ferramenta, como por exemplo :

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

I deve ter um muito velho Linux ...
MUY Bélgica

Eu editei a resposta, tente a findversão se o seu grep não suportar --exclude-dir.
jimmij

Eu tenho a versão grep versão 2.5.1, e não há argumento --exclude-dir, e eu tentei tudo o que eu pensava ...
MUY Belgium

1
A segunda solução não usa --exclude-dir, você já tentou?
jimmij

Eu tenho "opção unreconized"
MUY Bélgica

1

Eu normalmente uso isso:

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

${e%\./}remove o primeiro ./e depois grepremove tudo o que começa com um ponto.


O código diz e#, o texto dize%
Stephen Rauch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.