私は、卵 (Plone) を多用する Python プログラムに取り組んでいます。つまり、デバッグ中に検索したい Python コードでいっぱいのディレクトリが 198 個あるということです。関連のないコードや大きなバイナリ ファイルを避けて、それらのディレクトリ内の .py ファイルのみを検索する良い方法はありますか?
12 に答える
find DIRECTORY -name "*.py" | xargs grep PATTERN
ところで、これを書いて以来、私はackを発見しました。これははるかに優れたソリューションです。
(そして、その編集以来、私は ag を発見しました)。
grep -r -n "PATTERN" --include="*.py" DIRECTORY
grep の代替であるackを強くお勧めします。「異種ソースコードの大規模なツリーを持つプログラマーを対象としています」(Web サイトから)
最近はackもよく使います。関連するすべてのファイルタイプを見つけるために、少し調整しました。
# 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
覚えておくべき重要なことは、拡張機能がその構成に含まれていない場合、ack はファイルを見つけられないということです。利用可能なすべてのタイプについては、「ack --help-types」を参照してください。
また、オムレットを使用していると仮定して、すべての関連ファイルを grep/ack/find できますか?
この問題は、collective.recipe.omeletteを作成する動機でした。これは、ワーキングセットのすべての卵を1つのディレクトリ構造にシンボリックリンクできるビルドアウトレシピであり、お気に入りの検索ユーティリティをポイントできます。
find <directory> -name '*.py' -exec grep <pattern> {} \;
そして、単に十分な答えがないという理由で...
日常的に開発している場合は、EclipseをPydev(またはさらに簡単なAptana Studio-変更されたEclipse)とともにインストールすることは十分に価値があります。その場合、検索ツールがすぐそこにあります。
OpenGrok は、ソースの検索とナビゲーションに最適です。ただし、Javaで実行されます。
https://oracle.github.io/opengrok/のようなものがあればいいのにと思います
非コマンドライン OSS ソリューションが必要な場合に備えて...
私はpycharmを使用しています。ビルドアウトのサポートが組み込まれています。ビルドアウトで生成されたビン/インスタンスを指すと、プロジェクトの外部依存関係がインスタンスで使用されるすべての卵に設定されます。その後、IDE のすべてのイントロスペクションとコード ナビゲーションがうまく機能します。定義への移動、インスタンスへの移動、リファクタリングのサポート、そしてもちろん検索。
大規模なソース ツリーの識別子を非常に迅速に grep したい場合は、GNU idutilsもあります。mkid を実行して事前に検索データベースを構築する必要があります (.py ファイルを無視しないように構成ファイルを微調整します)。 buildout を使用する場合、z3c.recipe.tagがそれを処理します。
Emacs の rgrep コマンドを発見して以来、私の grep ライフはより満足のいくものになりました。
Plone のソースで 'IPortletDataProvider' を見つけたいとします。そうです:
M-x rgrep
- 検索文字列の Emacs プロンプト (IPortletDataProvider)
- ...次に、検索するファイル (*.py)
- ... 次に、どのディレクトリ (~/Plone/buildout-cache/eggs) を指定します。すでにファイルを編集している場合、これはデフォルトでそのファイルのディレクトリになります。これは通常、まさに私が望むものです。
結果は新しいバッファに表示されます。一番上はfind | xargs grep
Emacs が実行したコマンドです。すべての一致が強調表示されます。標準のテキスト検索コマンドを使用してバッファーを検索できます。何よりも、一致するファイルを Enter キー (またはクリック) で開くことができます。
なかなかいい働き方です。引数のシーケンスを覚える必要がないのが気に入っていますfind | xargs grep
が、必要な場合にはそのすべての力がそこにあります。