Quiero encontrar todas las ocurrencias de fooun gran sistema de archivos 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 cuelga.
¿Qué estoy haciendo mal?

*a., en caso de que haya otras carpetas ocultas que deberían buscarse.--recursive ., ya que el OP ya tiene GNUgrep.shopt -s dotgloben Bash, por lo que*ya contiene archivos de puntos.-res agradable, peroackhace que, por defecto también :)Quizás te interese un ack . Realiza búsquedas recursivas (y otras operaciones similares a grep) y excluye directorios como .svn o .git de forma predeterminada.
fuente
ag, que es similar, pero más rápido.La
grep --exclude-dir...solución debe estar bien, pero sólo para mostrar otra forma, se puede hacer esto confind's-prune:Si desea ejecutar algo más,
findes mejor que un simplegrep -r:fuente
Si no desea grep en directorios como
.svnnunca , puede configurar la$GREP_OPTIONSvariable para excluirlo de la siguiente manera:Simplemente agregue esta línea a su
.bashrcy sus greps recursivos ya no entrarán en los.svndirectorios. Por supuesto, puede ser tan rico como quieras:fuente
Aquí hay una solución awk también:
Básicamente, de todos los archivos, elimine los que coinciden con /.svn/ y luego, fuera de ellos, imprima solo los que coincidan con / foo /. También me gusta esta solución, ya que puedes usar fácilmente los resultados con ls. Por ejemplo, puedes usar
para ver una vista de lista ordenada por fecha de modificación. Además, es bueno tener la ruta completa de los resultados si desea hacer algo más con ellos (abrirlos, ejecutarlos, etc.)
fuente