2015-10-24 72 views
0

我需要grep約100萬個文件。如果有更好的方法來做到這一點,讓我知道。我想在Perl中可能有更快的方法來做到這一點。如何grep超過100萬個文件?

我想要做的是將其中包含文本httpsfile的每一行導出。

這裏就是我試圖運行:

grep 'httpsfile' * >> grepped.txt 

這裏是我得到的錯誤:

-bash: /bin/grep: Argument list too long 

任何幫助,將不勝感激。

+0

不需要爲此編寫任何代碼 - 只需使用xargs即可。 –

回答

2

嘗試ls | xargs grep httpsfile

+0

http://unix.stackexchange.com/questions/128985/why-not-parse-ls – jlliagre

2

只要將*更改爲./或者無論是包含100萬個文件的根目錄。您可能還需要添加-r以使grep遞歸併查看嵌套的目錄。

*在shell中展開爲所有文件。

3

你能做到並行,如果你想:

ls > /tmp/files 
parallel -a /tmp/files --xargs -s 100 grep 'httpsfile' 
+0

作爲一個(bash)行:'parallel -a <(ls)--xargs -s 100 grep'httpsfile'' – ikegami

3

除非你有大量的RAM和你上萬個文件已經在緩衝區高速緩存,並行化將不會給出的任何幫助事實上,操作將是I/O密集型所以這裏是最快的還是便攜式(POSIX)的方式:

find . -exec grep httpsfile {} + > grepped.txt 

注意與接受的答案解決方案,使用find不會失敗,名字古怪的文件。看看https://unix.stackexchange.com/questions/128985/why-not-parse-ls