2014-01-15 79 views
14

我是linux新手。我有一個目錄在linux中約250,000個文件 我需要找到匹配模式的文件數量。查找與Linux中某個目錄中的模式匹配的文件數

我嘗試使用以下命令:

ls -1 20061101-20131101_kh5x7tte9n_2010_* | wc -l 

,我得到了以下錯誤消息:

-bash: /bin/ls: Argument list too long 
0 

請幫助。在此先感謝

回答

29

這可能是最好使用find此:

find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" | wc -l 

find將返回符合條件的文件列表。 -maxdepth 1將使搜索只在路徑中完成,沒有子目錄(thanks Petesh!)。

然後wc -l會指示行數。兩個可能的選項


性能比較 - :

讓我們創建這個模式10個000文件:

$ for i in {1..10000}; do touch 20061101-20131101_kh5x7tte9n_201_$i; done 

,然後比較它需要與ls -1 ...find ...取得結果的時間:

$ time find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_201_*" | wc -l 
10000 

real 0m0.034s 
user 0m0.017s 
sys  0m0.021s 

$ time ls -1 | grep 20061101-20131101_kh5x7tte9n_201 | wc -l 
10000 

real 0m0.254s 
user 0m0.245s 
sys  0m0.020s 

find快x5倍!但是如果我們用ls -1fthanks Petesh again!),然後ls是速度甚至比find

$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l 
10000 

real 0m0.023s 
user 0m0.020s 
sys  0m0.012s 
+2

爲了防止遞歸到子目錄中,您可以使用'-maxdepth 1'(如果它在該版本的查找中受支持) – Petesh

+0

好的,@Petesh,相應地更新,謝謝! – fedorqui

+2

ls在輸出之前有排序的壞習慣,你應該用'ls -1 -f'來測試以獲得與查找性能評估類似的行爲 – Petesh

3

試試這個:

ls -1 | grep 20061101-20131101_kh5x7tte9n_2010_ | wc -l 
1

你有「說法太長時間」,因爲外殼擴展了您的模式的列表文件。 嘗試:

find -maxdepth 1 -name '20061101-20131101_kh5x7tte9n_2010_*' |wc -l 

請關注 - 模式是用引號括起來,以防止shell擴展

-2
ls -1 | grep '20061101-20131101_kh5x7tte9n_2010_*' | wc -l 

以前的答案沒有包括各地的搜索條件既不通配符*報價。

+0

這基本上是以前答案的重複,再加上它不起作用。 – blm

相關問題