2012-01-13 32 views
6

これはかなりシンプルなはずですが、わかりません。私は、Linux上で4GB以上の大きなコードベースを持っています。いくつかのヘッダファイルとxmlファイルがビルド時に生成されます(gnu makeを使用)。重要な場合は、ヘッダファイルはxmlファイルに基づいて生成されます。タイムスタンプに基づくgrepファイル

私は、時間インスタンス(その私のコンパイル時間)の後に最後に変更されたヘッダファイル内のキーワード、同様にxmlファイルを検索したいが、別のgrepクエリを検索したい。

すべての可能なヘッダーまたはxmlファイルで実行すると、時間がかかります。自動生成されたもののみ。さらに、多くのディレクトリとサブディレクトリが存在するため、検索は再帰的でなければなりません。

+0

現在のコマンドの例を含めることができます。あなたがすでに知っている明白なものを指摘する手間を省きます。 – sehe

答えて

11

は、すべてのファイルに'pattern'を検索してみてください:

find -newer some_file -type f -exec grep 'pattern' {} + 

あなたはdate -d形式で直接タイムスタンプを指定することもできますし、他のfindのテストを使用する例、-name,-mmin

findが遅すぎると、ビルドシステムによってファイルリストが生成される可能性があります。

ack,etags,GCCSenseなどの具体的なツールをgrepの代わりに使用できます。

+0

おかげさまで、私はちょうど答えよりも貴重なものを見つけました。私はGCCセンスを見たことがありませんでした。私はvimでeclipseコード補完機能を探していました。非常に最近開発されたと推測します。 – Kamath

+0

なぜ地球上には " - 新しい"フラグがありますが、 " - 下の"フラグはありませんか? – Guillochon

+2

@ Guillochon:['! -newer'](http://stackoverflow.com/q/13838845/4279) – jfs

11

あなたはfindコマンドを使用できます。

find . -mtime 0 -type f 

はで、最後の24時間(-mtime 0で変更された現在のディレクトリ(.)の下のすべてのファイル(-type f)のリストを出力し、1のようになります48h、2は72h、...)。より新しい現在のディレクトリにsome_fileとそのサブディレクトリを再帰的

grep "pattern" $(find . -mtime 0 -type f) 
+0

素晴らしい答えは、CentOS 5.6でうまくいきます。 – crmpicco

1

これを使用してください。 findがファイルを返さない場合、grepはスクリプトを停止する入力を待機し続けます。

find . -mtime 0 -type f | xargs grep "pattern" 
関連する問題