Comment pouvez-vous grep par le code qui vit dans de nombreux répertoires différents?

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

  •  21-08-2019
  •  | 
  •  

Question

Je travaille sur un programme Python qui utilise beaucoup d'œufs () Plone. Cela signifie qu'il ya 198 répertoires pleins de code Python je pourrais vouloir chercher dans tout le débogage. Y at-il un bon moyen de rechercher uniquement les fichiers dans py uniquement les répertoires, en évitant le code et sans rapport avec de gros fichiers binaires?

Était-ce utile?

La solution

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

Par ailleurs, depuis la rédaction de ce, j'ai découvert ack , qui est une solution beaucoup mieux.

(Et depuis cette édition, je l'ai découvert ag).

Autres conseils

Je recommande fortement ack , un substitut de grep « visant à programmeurs avec de grands arbres de code source hétérogène » ( du site)

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

Je l'utilise aussi ack beaucoup ces jours-ci. Je ne ruser un peu pour trouver tous les types de fichiers concernés:

# 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

Important à retenir est que ack ne trouvera pas les fichiers si l'extension est pas dans sa configuration. Voir "Types de --help-ack" pour tous les types disponibles.

Je suppose également que vous utilisez Omelette pour vous pouvez grep / ack / trouver tous les fichiers associés?

Ce problème a été la motivation pour la création de collective.recipe.omelette. Il est une recette de buildout qui peut créer un lien symbolique tous les œufs de votre travail dans une seule structure définie de répertoire, que vous pouvez pointer votre utilitaire de recherche préférée à.

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

Il y a aussi GNU idutils si vous voulez grep identifiants dans un grand arbre source très très rapidement. Il nécessite la construction d'une base de données de recherche à l'avance, en exécutant mKid (et peaufiner son fichier de configuration de ne pas ignorer les fichiers py). z3c.recipe.tag prend soin de cela, si vous utilisez buildout.

Juste au cas où vous voulez une solution non-OSS ... commandline

J'utilise PyCharm. Il a un support intégré pour buildout. Vous pointez vers un bin / instance générée buildout et définit les projets de dépendances externes à tous les œufs utilisés par l'instance. Ensuite, tout le travail d'introspection navigation de l'IDE et le code bien. définition Goto, les instances goto, soutien refactoring et de recherche de cours.

Je recommande sourire pour rechercher, omelette lorsque vous travaillez avec Zope et la pydev-fonction 'navigateur Globals' (avec Eclipse ou studio aptana).

Et tout simplement parce qu'il n'y a pas assez de réponses ...

Si vous développez régulièrement, il vaut bien l'effort d'installer Eclipse avec Pydev (ou encore plus facile, Aptana Studio - qui est une version modifiée Eclipse). Dans ce cas, les outils de recherche ne sont pas là

Ma vie grepper est beaucoup plus satisfaisante depuis la découverte de la commande de rgrep Emacs.

Dire que je veux trouver « IPortletDataProvider » dans la source de Plone. Je fais:

  1. M-x rgrep
  2. Emacs vous invite à la chaîne de recherche (IPortletDataProvider)
  3. ... puis les fichiers à la recherche (* .py)
  4. ... alors quel répertoire (~ / Plone / buildout-cache / oeufs). Si je suis d'édition déjà un fichier, la valeur par défaut dans le répertoire de ce fichier, qui est généralement exactement ce que je veux.

Les résultats apparaissent dans un nouveau tampon. Au sommet est la commande Emacs a couru find | xargs grep. Tous les matches sont mis en évidence. Je recherche la mémoire tampon à l'aide des commandes standard de recherche de texte. Le meilleur de tous, je peux appuyez sur Entrée (ou cliquez) sur un match pour ouvrir ce fichier.

Il est une façon assez agréable de travailler. J'aime que je n'ai pas de se rappeler des séquences argument <=>, mais que toute cette puissance est là si je besoin.

exemple de Emacs

OpenGrok est un excellent choix pour la source recherche et la navigation. Fonctionne sur Java, cependant.

Je souhaite vraiment qu'il y avait quelque chose comme http://opengrok.plone.org/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top