23

私は、卵 (Plone) を多用する Python プログラムに取り組んでいます。つまり、デバッグ中に検索したい Python コードでいっぱいのディレクトリが 198 個あるということです。関連のないコードや大きなバイナリ ファイルを避けて、それらのディレクトリ内の .py ファイルのみを検索する良い方法はありますか?

4

12 に答える 12

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

ところで、これを書いて以来、私はackを発見しました。これははるかに優れたソリューションです。

(そして、その編集以来、私は ag を発見しました)。

于 2009-05-14T20:00:33.133 に答える
20
grep -r -n "PATTERN" --include="*.py" DIRECTORY
于 2009-05-14T20:04:37.147 に答える
19

grep の代替であるackを強くお勧めします。「異種ソースコードの大規模なツリーを持つプログラマーを対象としています」(Web サイトから)

于 2009-05-14T20:15:21.257 に答える
7

最近は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 できますか?

于 2009-06-16T14:43:24.463 に答える
4

この問題は、collective.recipe.omeletteを作成する動機でした。これは、ワーキングセットのすべての卵を1つのディレクトリ構造にシンボリックリンクできるビルドアウトレシピであり、お気に入りの検索ユーティリティをポイントできます。

于 2011-02-27T05:00:22.757 に答える
4
find <directory> -name '*.py' -exec grep <pattern> {} \;
于 2009-05-14T20:04:42.203 に答える
2

そして、単に十分な答えがないという理由で...

日常的に開発している場合は、EclipseをPydev(またはさらに簡単なAptana Studio-変更されたEclipse)とともにインストールすることは十分に価値があります。その場合、検索ツールがすぐそこにあります。

于 2011-03-04T03:56:29.540 に答える
2

plone と pydev-feature 'Globals browser' (eclipse または aptana studio を使用) で作業する場合は、 grinで検索、オムレツをお勧めします。

于 2011-02-28T09:19:30.607 に答える
2

OpenGrok は、ソースの検索とナビゲーションに最適です。ただし、Javaで実行されます。

https://oracle.github.io/opengrok/のようなものがあればいいのにと思います

于 2011-03-07T21:01:53.793 に答える
2

非コマンドライン OSS ソリューションが必要な場合に備えて...

私はpycharmを使用しています。ビルドアウトのサポートが組み込まれています。ビルドアウトで生成されたビン/インスタンスを指すと、プロジェクトの外部依存関係がインスタンスで使用されるすべての卵に設定されます。その後、IDE のすべてのイントロスペクションとコード ナビゲーションがうまく機能します。定義への移動、インスタンスへの移動、リファクタリングのサポート、そしてもちろん検索。

于 2011-02-27T04:21:08.687 に答える
2

大規模なソース ツリーの識別子を非常に迅速に grep したい場合は、GNU idutilsもあります。mkid を実行して事前に検索データベースを構築する必要があります (.py ファイルを無視しないように構成ファイルを微調整します)。 buildout を使用する場合、z3c.recipe.tagがそれを処理します。

于 2009-09-17T20:59:42.150 に答える
1

Emacs の rgrep コマンドを発見して以来、私の grep ライフはより満足のいくものになりました。

Plone のソースで 'IPortletDataProvider' を見つけたいとします。そうです:

  1. M-x rgrep
  2. 検索文字列の Emacs プロンプト (IPortletDataProvider)
  3. ...次に、検索するファイル (*.py)
  4. ... 次に、どのディレクトリ (~/Plone/buildout-cache/eggs) を指定します。すでにファイルを編集している場合、これはデフォルトでそのファイルのディレクトリになります。これは通常、まさに私が望むものです。

結果は新しいバッファに表示されます。一番上はfind | xargs grepEmacs が実行したコマンドです。すべての一致が強調表示されます。標準のテキスト検索コマンドを使用してバッファーを検索できます。何よりも、一致するファイルを Enter キー (またはクリック) で開くことができます。

なかなかいい働き方です。引数のシーケンスを覚える必要がないのが気に入っていますfind | xargs grepが、必要な場合にはそのすべての力がそこにあります。

Emacs rgrep の例

于 2011-02-27T00:03:30.027 に答える