¿Cómo se grep a través del código que se vive en muchos directorios diferentes?

StackOverflow https://stackoverflow.com/questions/865382

  •  21-08-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un programa de Python que hace uso intensivo de los huevos (Plone). Eso significa que hay 198 directorios llenos de código Python que podría querer buscar a través durante la depuración. ¿Hay una buena manera de buscar sólo los archivos .py en sólo aquellos directorios, evitando código no relacionada y grandes archivos binarios?

¿Fue útil?

Solución

find DIRECTORY -name "*.py" | xargs grep PATTERN

Por cierto, ya que escribir esto, he descubierto ACK , que es una solución mucho mejor.

(Y puesto que la edición, he descubierto AG).

Otros consejos

No te recomiendo ACK , un sustituto grep "dirigido a los programadores con grandes árboles de código fuente heterogénea" ( desde el sitio web)

grep -r -n "PATTERN" --include="*.py" DIRECTORY

También utilizo ACK mucho en estos días. Yo ajustar un poco para encontrar todos los tipos de archivos relevantes:

# Add zcml to the xml type:
--type-add
xml=.zcml

# Add more files the plone type:
--type-add
plone=.dtml,.zpt,.kss,.vpy,.props

# buildout config files
--type-set
buildout=.cfg

# Include our page templates to the html type so we can limit our search:
--type-add
html=.pt,.zpt

# Create txt file type:
--type-set
txt=.txt,.rst

# Define i18n file types:
--type-set
i18n=.pot,.po

# More options
--follow
--ignore-case
--nogroup

Es importante recordar es que ACK no encontrará archivos si la extensión no está en su configuración. Consulte "ACK --help-tipos" para todos los tipos disponibles.

También suponga que está utilizando tortilla por lo que pueda grep / ACK / encontrar todos los archivos relacionados?

Este problema fue la motivación para la creación de collective.recipe.omelette. Es una receta buildout que puede enlazar simbólicamente todos los huevos de su conjunto de trabajo en una estructura de directorios, que puede apuntar su utilidad de búsqueda favorito al.

find <directory> -name '*.py' -exec grep <pattern> {} \;

También hay GNU idutils si quieres grep para identificadores en un árbol de fuentes muy grande muy rápidamente. Se requiere la construcción de una base de datos de búsqueda de antemano, mediante la ejecución de mkid (y ajustar su archivo de configuración para no pasar por alto los archivos .py). z3c.recipe.tag se encarga de eso, si usa buildout.

En caso de que desea una solución OSS no de comandos ...

Yo uso PyCharm. Se ha construido en apoyo a buildout. La que apunte a una buildout generada bin / instance y establece los proyectos de dependencias externas a todos los huevos utilizados por la instancia. Entonces todo introspección y la navegación de código trabajo del IDE muy bien. definición Goto, casos Goto, el apoyo refactorización y de búsqueda de cursos.

sonrisa a buscar, tortilla cuando se trabaja con Plone y el pydev-estelar 'navegador Globals' (con Eclipse o estudio aptana).

Y simplemente porque no hay suficientes respuestas ...

Si está desarrollando de forma rutinaria, vale la pena el esfuerzo para instalar Eclipse con PyDev (o incluso más fácil, Aptana Studio - que es un Eclipse modificado)., En cuyo caso las herramientas están ahí hallazgo

Mi vida grepping es la forma más satisfactoria desde el descubrimiento de comandos rgrep Emacs'.

Digamos que quiero encontrar 'IPortletDataProvider' en la fuente de Plone. Yo:

  1. M-x rgrep
  2. Emacs pide la cadena de búsqueda (IPortletDataProvider)
  3. ... entonces los archivos que desea buscar (* .py)
  4. ... entonces qué directorio (~ / Plone / buildout-cache / huevos). Si ya estoy editando un fichero, el valor predeterminado es el directorio de ese archivo, que suele ser exactamente lo que quieren.

Los resultados aparecen en un nuevo buffer. En la parte superior es el comando find | xargs grep Emacs funcionó. Todos los partidos se ponen de relieve. Puedo buscar en la memoria intermedia utilizando los comandos de búsqueda de texto estándar. Lo mejor de todo, que pulsas la tecla Intro (o haga clic) en un partido para abrir ese archivo.

Es una bonita manera de trabajar. Me gustaría que no tengo que recordar <=> secuencias de argumentos, pero que todo lo que el poder es allí si lo necesita.

Emacs rgrep ejemplo

OpenGrok es una excelente opción para la búsqueda de la fuente y la navegación. Se ejecuta en Java, sin embargo.

Me gustaría que hubiera algo así como http://opengrok.plone.org/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top