Excluir.directorios svn de grep [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Cuando abro mi directorio de copia de trabajo de Subversion, los resultados incluyen muchos archivos del .directorios svn. Es posible grep recursivamente un directorio, pero excluir todos los resultados de .directorios svn?

Author: Tunaki, 2009-09-29

11 answers

Si tienes GNU Grep, debería funcionar así:

grep --exclude-dir=".svn"

Si se encuentra en un sistema Unix sin GNU Grep, intente lo siguiente:

grep -R "whatever you like" *|grep -v "\.svn/*" 
 264
Author: psychoschlumpf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-04 23:52:30

Si usas ack (un 'grep mejor') manejará esto automáticamente (¡y hará muchas otras cosas inteligentes también!). Vale la pena comprobarlo.

 36
Author: Brian Agnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-29 09:36:30

Para grep > = 2.5.1 a

Puede poner esto en su entorno (por ejemplo, .bashrc)

export GREP_OPTIONS='--exclude-dir=".svn"'

PD: gracias a Adrinan, hay citas adicionales en mi versión:

export GREP_OPTIONS='--exclude-dir=.svn'
 34
Author: osgx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-14 15:33:42

Psychoschlumpf es correcto, pero solo funciona si tiene la última versión de grep. Las versiones anteriores no tienen la opción --exclude-dir. Sin embargo, si tiene una base de código muy grande, double-grep-ing puede tardar para siempre. Coloque esto en su .bashrc para un portable .svn-menos grep:

alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'

Ahora puedes hacer esto:

sgrep some_var

... y obtener los resultados esperados.

Por supuesto, si eres una persona loca como yo que solo tiene para usar el mismo .bashrc en todas partes, podrías gastar 4 horas escribiendo una función bash demasiado complicada para poner allí en su lugar. O , puedes esperar a que una persona loca como yo lo publique en línea:

Http://gist.github.com/573928

 7
Author: Max Cantor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-10 16:30:03
grep --exclude-dir=".svn"

Funciona porque el nombre ".svn " es bastante único. Pero esto podría fallar en un nombre más generalizado.

grep --exclude-dir="work"

No es a prueba de balas, si tiene "/home/user/work" y "/home/user/stuff/work" se saltará ambos. No es posible definir " / * / work/*" para restringir la exclusión solo al nombre de la carpeta anterior. Por lo que he podido experimentar, en GNU grep el simple exclude exclude no excluye directorios.

 2
Author: karatedog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-21 21:57:57

En mi GNU grep 2.5, --exclude-dirs no es una opción válida. Como alternativa, esto funcionó bien para mí:

grep --exclude="*.svn-base"

Esta debería ser una mejor solución que excluir todas las líneas que contienen .svn/ ya que no filtraría accidentalmente dichas líneas en un archivo real.

 2
Author: user193130,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-04 16:00:15

Dos greps harán el truco:

  1. El primer grep obtendrá todo.
  2. El segundo grep utilizará la salida del primer grep como entrada (a través de tuberías). Usando la bandera-v, grep seleccionará las líneas que NO coincidan con los términos de búsqueda. Voila. Te quedas con todas las salidas del primer grep que no contienen .svn en la ruta de archivo.

    - v ,inver invert-match Invertir el sentido de coincidencia, para seleccionar líneas no coincidentes.

    grep the_text_you_want_to_search_for * | grep -v .svn
    
 1
Author: Joseph Huttner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-11 17:02:35

Probé double grep'in en mi enorme base de código y me llevó una eternidad, así que obtuve esta solución con la ayuda de mi compañero de trabajo

La poda es mucho más rápida, ya que evita que find procese esos directorios en comparación con 'grep-v', que procesa todo y solo excluye la visualización de resultados

find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'

También puede alias este comando en su .bashrc as

alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '

Ahora simplemente use

sgrep 'whatever' 
 1
Author: Sid Sarasvati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-15 03:13:02

Otra opción, aunque no sea percibida como una respuesta aceptable es clonar el repositorio en git y usar git grep.

Rara vez, me encuentro con repositorios svn que son tan masivos, que es poco práctico clonar a través de git-svn. En estos casos raros, utilizo una solución grep doble, svngrep , pero como muchas respuestas aquí indican, esto podría ser lento en repositorios grandes, y excluir '.ocurrencias de svn que no son directorios. Yo diría que estos serían extremadamente aunque rara vez...

También con respecto al rendimiento lento de varios greps, una vez que haya utilizado algo como git, ¡casi todo parece lento en svn!

Una última cosa.., mi variación de svngrep pasa a través de la coloración, cuidado, la aplicación es feo! Aproximadamente grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"

 1
Author: quickshiftin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 01:34:43

Para grep versión 2.5.1 puede agregar múltiples elementos --exclude para filtrar los archivos .svn.

$ grep -V | grep grep
grep (GNU grep) 2.5.1

GREP_OPTIONS="--exclude=*.svn-base --exclude=entries --exclude=all-wcprops" grep -l -R  whatever ./
 0
Author: ZaSter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-23 01:15:40

Creo que la opción rec exclude de recursión es lo que está buscando.

 -1
Author: Patrice Bernassola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-29 09:43:56