2012-05-03 9 views
2

私は正規表現を使ってファイルを探すスクリプトを持っています。-regexがfindよりも遅い検索| grep

find $dir | grep "$regex" 

少し遅すぎる実行スクリプトと私はそれを最適化したい:コードは以下の通りでした。検索にはある程度の時間がかかりますが、パフォーマンスを向上させたいと考えています。私はこの試みを試みました:

正規表現を解析する特別なプロセスが作成されていないため、少し速い結果が期待されていました。 (それはより多くのシステム時間を要するものの1が期待したように、)私は、時限きた「-regex見つける」よりも高速である

を|結果は違っていたし、私の驚きにコマンドが「grepを見つける」しかし

この動作:

Find | grepの結果

real 0m12.467s 
user 0m2.568s 
sys 0m7.260s 

は-regex見つけるソリューションが遅い理由

real 0m16.778s 
user 0m6.772s 
sys 0m6.380s 

は、あなたが任意のアイデアを持っています-regex結果を探しますか?

答えて

5

grepとその正規表現エンジンは長年にわたって高度に最適化されている可能性が高いと思われます。それはそれが唯一の目的であるからです。私は正規表現エンジンfindが何を使用しているのか分かりませんが、それは明らかにgrepのように高度に洗練されていません。

また、このファイルリストを使って何かをしている場合は、実際にこれを行うより空白に安全な方法を使用する必要があります。私はgrepがヌルで区切られた入力を受け取ることはできないと考えています(出力することはできますが)ので、遅くてもfind [...] -regex [...] -print0を使用してください。

+0

ヒントをお寄せいただきありがとうございます。この使用例では、-print0は必要ありませんが、よく使うスイッチです。私はRubyで検索結果を得ています。文字列を "\ n"に分割しています。名前に\ nがないかぎり、私はうまくいくはずです。 – Huygens