2014-10-27 34 views
-2

我想知道什麼是最大數量,對於-loop命令可以支持bash + dose for loop有限制嗎?

,比如我有900 .txt文件

當我運行的for循環中,我看到所有文件被使用grep匹配

但劑量for循環可以讀取例如20000個文件?什麼限制?

ls | grep .txt | wc -l 

950 

for循環

for FILE_NAME in ` ls | grep .txt ` 
do 
grep WORD $FILE_NAME 
done 
+3

嗯,你不應該在這裏使用'ls' ...'爲FILE_NAME在* .txt'中 – 2014-10-27 11:23:07

+2

WHY -1?我的問題有什麼不好? – maihabunash 2014-10-27 11:30:10

+0

你是什麼意思的'grep perl $ FILE_NAME' – nu11p01n73R 2014-10-27 11:33:18

回答

2

內置的構造就像一個for循環有沒有最大:

for FILE_NAME in *.txt; do 

可以擴展到*.txt名稱都存在於當前目錄中。由於bash擴展模式迭代結果,它可以管理列表本身。這同樣適用於像

printf "%s\n" *.txt 

一個內置的命令,因爲這兩個bash擴展圖案和在解釋器過程本身執行printf

對比度與

ls *.txt 

在這裏,我們知道有兩個獨立的程序(在bash解釋和ls)通過操作系統的API傳遞參數的命令通信。 bash必須將模式擴展爲所有匹配的文件,它們將它們放到用於將參數傳遞給新進程的數組中(請考慮main()函數的argv)。 這個數組有一個由您的操作系統定義的最大大小,如果匹配的文件過多,會導致「命令行太長」或「太多參數」錯誤。

+0

upvote for you -can you also upvote for me? (我認爲我的問題質量很好(不明白爲什麼我得到-2) – maihabunash 2014-10-28 08:14:55

0

在1959年文件中的試運行將

$ ls | wc -l 
1960 

for循環使用

$count=0 
$ for file in * 
> do 
>((count += 1)) 
> done 

echo $count 
1959 

肯定會爲900個文件工作

for帶有globbing的循環可用於處理目錄中的每個文件。

#!/bin/bash 

filename="*txt" 

for file in $filename 
do 
#Do something 
done 

Bash在通配符識別的表達式上執行文件名擴展。

+0

的問題是的 - 但我想獲得最大編號! – maihabunash 2014-10-27 11:56:47

+0

@maihabunash只受目錄中的文件數量限制 – nu11p01n73R 2014-10-27 12:08:03