我是linux新手。我有一個目錄在linux中約250,000個文件 我需要找到匹配模式的文件數量。查找與Linux中某個目錄中的模式匹配的文件數
我嘗試使用以下命令:
ls -1 20061101-20131101_kh5x7tte9n_2010_* | wc -l
,我得到了以下錯誤消息:
-bash: /bin/ls: Argument list too long
0
請幫助。在此先感謝
我是linux新手。我有一個目錄在linux中約250,000個文件 我需要找到匹配模式的文件數量。查找與Linux中某個目錄中的模式匹配的文件數
我嘗試使用以下命令:
ls -1 20061101-20131101_kh5x7tte9n_2010_* | wc -l
,我得到了以下錯誤消息:
-bash: /bin/ls: Argument list too long
0
請幫助。在此先感謝
這可能是最好使用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 -1f
(thanks Petesh again!),然後ls
是速度甚至比find
:
$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
10000
real 0m0.023s
user 0m0.020s
sys 0m0.012s
試試這個:
ls -1 | grep 20061101-20131101_kh5x7tte9n_2010_ | wc -l
你有「說法太長時間」,因爲外殼擴展了您的模式的列表文件。 嘗試:
find -maxdepth 1 -name '20061101-20131101_kh5x7tte9n_2010_*' |wc -l
請關注 - 模式是用引號括起來,以防止shell擴展
ls -1 | grep '20061101-20131101_kh5x7tte9n_2010_*' | wc -l
以前的答案沒有包括各地的搜索條件既不通配符*報價。
這基本上是以前答案的重複,再加上它不起作用。 – blm
爲了防止遞歸到子目錄中,您可以使用'-maxdepth 1'(如果它在該版本的查找中受支持) – Petesh
好的,@Petesh,相應地更新,謝謝! – fedorqui
ls在輸出之前有排序的壞習慣,你應該用'ls -1 -f'來測試以獲得與查找性能評估類似的行爲 – Petesh