2015-11-10 77 views
-1

我最近发现这个解决方案通过基于可用内核的压缩gz文件。有没有什么办法通过bz2文件parellelly grep

find . -name "*.gz" | xargs -n 1 -P 3 zgrep -H '{pattern to search}' 

P.S. 3是核心数

我想知道是否有办法为bz2文件做它。 目前我使用的命令如下:

find -type f -name '*.bz2' -execdir bzgrep "{text to find}" {} /dev/null \; 
+0

只是代替''zgrep'在bzgrep'的'xargs'? – blm

+0

呃?并行化的并不是那么简单,而是一丝不苟。实际上,在任何地方你都没有'少'的问题......并且你在简单的方式上同时并行多个文件,但每个文件只有一个执行线程,而不是唯一的 - 有时候 - 可能的方式是,从多个点并行解压缩同一文件(这要求将压缩器配置为定期重置自身并构建新表格 - 从而实现并行解码,而性能和输出大小需要一定的成本)。 –

+0

另外,你当前的gzip版本不适用于所有可能的文件名,因为它以面向行的形式从'find'获取输出,但文件名允许包含文字换行符。为了完全安全,您需要使用NUL分隔符(不能存在于由C字符串表示的文件名或其他内容中)。 –

回答

3

认真吗?将*.gz更改为*.bz2;将zgrep更改为bzgrep,并且您就是这样。

对于一个有点绕不寻常的文件名额外的安全性,对xargs使用-print0find-0

find . -name "*.bz2" -print0 | xargs -0 -n 1 -P 3 bzgrep -H '{pattern to search}' 
相关问题