如何grep超过100万个文件?

时间:2015-10-24 21:32:43

标签: perl shell command-line ssh grep

我需要大约100万个文件。如果有更好的方法,请告诉我。我以为在perl中可能有更快的方法。

我要做的是导出包含文本httpsfile的每一行。

以下是我正在尝试运行的内容:

grep 'httpsfile' * >> grepped.txt

这是我得到的错误:

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

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

如果您愿意,可以并行执行:

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

答案 1 :(得分:3)

除非你有大量的RAM并且你的百万文件已经在缓冲区缓存中,否则并行化将没有任何帮助,因为操作将受I / O限制,因此这里是最快的可移植(POSIX) )方式:

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

请注意,与接受的答案解决方案不同,使用find时,使用奇怪命名的文件不会失败。看看https://unix.stackexchange.com/questions/128985/why-not-parse-ls

答案 2 :(得分:2)

尝试ls | xargs grep httpsfile

答案 3 :(得分:2)

只需将*更改为./,或者包含100万个文件的根目录。您可能还需要添加-r以使grep递归并查看嵌套目录。

shell中的

*扩展为所有文件。