2012-04-20 63 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 

:模式匹配增加了大量時間。我能解決這個問題嗎?

作爲一個側面說明,文件系統是光澤,我可以處理非便攜式解決方案。

回答

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 2012-04-20 18:25:40

+0

如果文件的名稱中有換行符,則可能會計爲兩個或更多文件。我會這樣做:'找。 -maxdepth 1 -name'* .o'-printf「\ n」| wc -l'。 (在這種情況下,'-name'* .o''可以防止計算'.',但在其他情況下,您可能還需要'-mindepth 1'來排除'.'。) – musiphil 2013-05-17 20:59:30