我需要grep約100萬個文件。如果有更好的方法來做到這一點,讓我知道。我想在Perl中可能有更快的方法來做到這一點。如何grep超過100萬個文件?
我想要做的是將其中包含文本httpsfile
的每一行導出。
這裏就是我試圖運行:
grep 'httpsfile' * >> grepped.txt
這裏是我得到的錯誤:
-bash: /bin/grep: Argument list too long
任何幫助,將不勝感激。
我需要grep約100萬個文件。如果有更好的方法來做到這一點,讓我知道。我想在Perl中可能有更快的方法來做到這一點。如何grep超過100萬個文件?
我想要做的是將其中包含文本httpsfile
的每一行導出。
這裏就是我試圖運行:
grep 'httpsfile' * >> grepped.txt
這裏是我得到的錯誤:
-bash: /bin/grep: Argument list too long
任何幫助,將不勝感激。
嘗試ls | xargs grep httpsfile
。
http://unix.stackexchange.com/questions/128985/why-not-parse-ls – jlliagre
只要將*
更改爲./
或者無論是包含100萬個文件的根目錄。您可能還需要添加-r
以使grep遞歸併查看嵌套的目錄。
*
在shell中展開爲所有文件。
你能做到並行,如果你想:
ls > /tmp/files
parallel -a /tmp/files --xargs -s 100 grep 'httpsfile'
作爲一個(bash)行:'parallel -a <(ls)--xargs -s 100 grep'httpsfile'' – ikegami
除非你有大量的RAM和你上萬個文件已經在緩衝區高速緩存,並行化將不會給出的任何幫助事實上,操作將是I/O密集型所以這裏是最快的還是便攜式(POSIX)的方式:
find . -exec grep httpsfile {} + > grepped.txt
注意與接受的答案解決方案,使用find
不會失敗,名字古怪的文件。看看https://unix.stackexchange.com/questions/128985/why-not-parse-ls
不需要爲此編寫任何代碼 - 只需使用xargs即可。 –