Buscar carpeta de forma recursiva pero excluir la subcarpeta svn

Buscar carpeta de forma recursiva pero excluir la subcarpeta svn

Quiero encontrar todas las apariciones de fooen un sistema de archivos grande mantenido por SVN pero no quiero hacer coincidir nada contenido en ningún .svndirectorio.

Obtengo coincidencias inmediatas cuando lo hago, grep -l -e 'foo' *pero cuando intento excluir los directorios svn con grep -l -e 'foo' --exclude-dir=".svn"el comando simplemente se bloquea.

¿Qué estoy haciendo mal?

Respuesta1

--exclude-dirno reemplaza la necesidad de enumerar archivos en la línea de comando. Está "colgado" porque grepestá esperando la entrada estándar.

grep -l -e 'foo' --exclude-dir=".svn"*

Considere usarack, que excluye .svncarpetas similares (y tiene muchas otras características) de forma predeterminada.

Respuesta2

Te podría interesarack. Realiza búsquedas recursivas (y otras operaciones similares a grep) y excluye directorios como.svno.gitpor defecto.

Respuesta3

La grep --exclude-dir...solución debería estar bien, pero sólo para mostrar otra forma, puedes hacer esto con find's -prune:

find -name .svn -prune -o -type f -exec grep -l "$pattern" {} +

Si desea ejecutar algo más, findes mejor que un simple grep -r:

find -name .svn -prune -o -type f -exec grep -q "$pattern" {} \; -exec ./process {} \;

Respuesta4

Si no desea acceder a directorios como.svn alguna vezpuede configurar la $GREP_OPTIONSvariable para excluirla como se muestra a continuación:

export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"

Simplemente agregue esta línea a su .bashrcy sus greps recursivos ya no ingresarán a .svnlos directorios. Eso sí, puede quedar tan rico como quieras:

export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"

información relacionada