Excluir subdirectorios ocultos de grep -r


22

Tengo una copia local svn, quiero hacer una búsqueda en la cadena some_string.

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

Pero si vamos un poco más lejos, parece que los directorios ocultos de primer nivel están excluidos:

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

¿Cómo puedo eliminar los directorios svn ocultos de mi salida, y no solo desde el primer nivel de profundidad?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

No es una respuesta directa, pero es posible que desee probar ack .
depquid

Respuestas:


21

--exclude-dirOpción de uso , por ejemplo:

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

De man grep:

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

Sin embargo, --exclude-dirtenga en cuenta que esa opción solo está disponible en GNU grep. Si grepno lo admite, es posible que necesite usar otra herramienta como encontrar, por ejemplo :

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

Debo tener un Linux demasiado viejo ...
MUY Bélgica

He editado la respuesta, prueba la findversión si tu grep no es compatible --exclude-dir.
jimmij

Tengo la versión grep versión 2.5.1, y no hay un argumento --exclude-dir, y he intentado todo lo que pensaba ...
MUY Bélgica

1
La segunda solución no usa --exclude-dir, ¿lo has probado?
jimmij

Tengo "opción no reconocida"
MUY Bélgica

1

Normalmente uso esto:

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

${e%\./}eliminará el primero ./y luego grepeliminará todo lo que comienza con un punto.


El código dice e#, el texto dicee%
Stephen Rauch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.