2012-04-20 8 views
4

現在、8Kファイルを持つディレクトリがあります。次の月かそれ以上になると、その数は100Kプラスに増加します。特定のパターンに一致するディレクトリ内のファイルを数えられるようにする必要があります。ファイルの数があまりにも大きくなり、パターンによってカウントする時間を増加し続けたようパターンに一致するファイルの数を得るための速い方法

[[email protected] scripts]$ time ls | grep . -c 
8373 

real 0m0.115s 
user 0m0.109s 
sys 0m0.009s 
[[email protected] scripts]$ time ls *.o* | grep . -c 
6262 

real 0m1.997s 
user 0m0.121s 
sys 0m0.270s 

:パターンマッチは、膨大な時間を追加します。私はこれを回避することはできますか?

ファイルシステムはLustreであり、私は移植性のないソリューションを扱うことができます。

答えて

6

おそらく、あなたのグロブは実際にはbashによって拡張され、パラメータはlsに渡されるので、少し余分な作業です。これは私のために働きます:

[email protected]:~/junk$ time find . | wc -l 
188318 

real 0m0.202s 
user 0m0.076s 
sys 0m0.136s 

[email protected]:~/junk$ time find . -name '*.o' | wc -l 
374 

real 0m0.243s 
user 0m0.160s 
sys 0m0.080s 

速度の違いはほとんどありません。これは再帰的ですが、必要がない場合はmaxdepthを設定できます。

多分私はいくつかのジャンクをきれいにする時間です...

+0

パーフェクト!!どうもありがとう。 – Sevenless

+0

ファイル名に改行がある場合は、2つ以上のファイルとしてカウントされることがあります。私はこれをするでしょう: 'find。 -maxdepth 1 -name '* .o' -printf「\ n」| wc -l'。 (この場合、 '-name '* .o' 'は' .'がカウントされないようにしますが、 '-mindepth 1'で' .'を除外する必要があるかもしれません)。 – musiphil

関連する問題