Perl 如何grep超过100万个文件?
我需要grep大约一百万个文件。如果有更好的方法,请告诉我。我在想也许有一种更快的方法可以在perl中实现 我要做的是导出其中包含文本Perl 如何grep超过100万个文件?,perl,shell,command-line,ssh,grep,Perl,Shell,Command Line,Ssh,Grep,我需要grep大约一百万个文件。如果有更好的方法,请告诉我。我在想也许有一种更快的方法可以在perl中实现 我要做的是导出其中包含文本httpsfile的每一行 以下是我试图运行的内容: grep 'httpsfile' * >> grepped.txt 下面是我得到的错误: -bash: /bin/grep: Argument list too long 任何帮助都将不胜感激。请尝试ls | xargs grep httpsfile只需将*更改为/或包含100万个文件的根目录即
httpsfile
的每一行
以下是我试图运行的内容:
grep 'httpsfile' * >> grepped.txt
下面是我得到的错误:
-bash: /bin/grep: Argument list too long
任何帮助都将不胜感激。请尝试
ls | xargs grep httpsfile
只需将*
更改为/
或包含100万个文件的根目录即可。您可能还需要添加-r
,以使grep递归并查看嵌套目录
shell中的
*
扩展到所有文件。如果需要,可以并行执行:
ls > /tmp/files
parallel -a /tmp/files --xargs -s 100 grep 'httpsfile'
除非您有大量的RAM,并且上百万个文件已经在缓冲区缓存中,否则并行化不会有任何帮助,因为操作将受到I/O限制,因此下面是最快的仍然可移植(POSIX)方式:
请注意,与公认的答案解决方案不同,使用
find
查找命名奇怪的文件不会失败。看看无需为此编写任何代码-只需使用xargs.As(bash)行:parallel-a
find . -exec grep httpsfile {} + > grepped.txt