Utilizo mucho greps recursivos para encontrar archivos fuente con contenido específico.
grep -Rni "myfunc" .
En bases de código grandes, esto puede ser lento, por lo que uso --incluso para restringir / incluir extensiones en la lista blanca.
grep -Rni --include=*.java "myfunc" .
Sin embargo, sería más eficiente excluir (podar) subdirectorios completos, estoy pensando:
grep -Rni --exclude=/.svn/ "myfunc" .
Pero --exclude solo admite patrones de archivo como * .java arriba. ¿Cómo puedo excluir directorios?
linux
command-line
grep
gabor
fuente
fuente
Fuente: https://stackoverflow.com/questions/2799246/grep-excluding-a-specific-folder-using
fuente
./dev
será excluido JUNTO CON./foo/bar/dev
. Use--exclude-dir=./dev
para aplicar solo al primer caso.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
el único problema con el globbing es que no puedo hacer que funcione en mi bash. En ese caso, tengo que mantenerlos separados.{}
con una sola entrada, probablemente necesite una coma unitaria para convertirla en una matriz (no estoy seguro de cómo Bash maneja eso). En lugar de hacerlo, terminé creando un alias en mis .bash_aliases que recorre una lista de carpetas que normalmente siempre quiero excluir, por ejemplo .git, .svn, .hg, .cache, y luego las agrego a través de un bucle con--exclude-dir $dir
y luego expande esa matriz en el alias grep.puedes usar find en su lugar:
Bien, eso es un poco al revés, primero obtienes los resultados grep y luego el camino. ¿Quizás alguien más tiene una mejor respuesta?
fuente
Aquí hay un ejemplo completo de un script en uno de mis proyectos que podría ayudar, llamo a este archivo "all_source" (marcado como ejecutable) y lo pongo en el directorio raíz de mi proyecto y luego lo llamo como
grep myfunc $(./all_source)
el tipo al final del script es totalmente Opcional.Este script devuelve todos los nombres de archivo en el proyecto que coinciden
*.h, *.cpp, *.c, *.lua, *.*awk
, pero no busca en todas las carpetas llamadas carpetas .svn y gen, así como omite las carpetas para./lib
y./vc6
(pero solo las que están directamente fuera de la raíz del proyecto). Entonces, cuando lo hacesgrep myfunc $(./all_source)
, solo greps en esos archivos. También deberá llamar a esto desde el directorio raíz del proyecto.fuente
También existe la opción -prune para encontrar:
fuente
Puedes intentar hacer esto:
Por ejemplo: si no desea buscar el contenido en los archivos de registro, simplemente haga lo siguiente:
fuente