find文件夹中gzip文件中的string

我目前的问题是,我有大约10个文件夹,其中包含gzip文件(每个平均5左右)。 这使得50个文件打开,看看。

有一个更简单的方法来找出一个文件夹中的gzip文件是否有特定的模式?

zcat ABC/myzippedfile1.txt.gz | grep "pattern match" zcat ABC/myzippedfile2.txt.gz | grep "pattern match" 

对于所有的文件夹和子文件夹,我可以在一行中做同样的事情吗?

 for f in `ls *.gz`; do echo $f; zcat $f | grep <pattern>; done; 

zgrep会查看gzip文件,有-Rrecursion选项,而-H显示文件名选项:

 zgrep -R --include=*.gz -H "pattern match" . 

你不需要zcat ,因为有zgrepzegrep。

如果你想在一个目录层次上运行一个命令,你可以使用find:

 find . -name "*.gz" -exec zgrep ⟨pattern⟩ \{\} \; 

而且“ ls *.gz ”也没用,你今后应该只用“* .gz”。

使用find命令

 find . -name "*.gz" -exec zcat "{}" + |grep "test" 

或者尝试使用zcat的recursion选项(-r)

zgrep如何不支持-R

我认为“Nietzche-jou”的解决scheme可能是更好的答案,但我会添加选项-H来显示文件名

 find . -name "*.gz" -exec zgrep -H 'PATTERN' \{\} \; 

有点迟了,有类似的问题,并能够解决使用;

 zcat -r /some/dir/here | grep "blah" 

如这里所详述的;

http://manpages.ubuntu.com/manpages/quantal/man1/gzip.1.html

但是,这并不显示结果匹配的原始文件,而是显示“(标准input)”,因为它是从pipe道input的。 zcat似乎也不支持输出名称。

在performance方面,这是我们得到的;

 $ alias dropcache="sync && echo 3 > /proc/sys/vm/drop_caches" $ find 09/01 | wc -l 4208 $ du -chs 09/01 24M $ dropcache; time zcat -r 09/01 > /dev/null real 0m3.561s $ dropcache; time find 09/01 -iname '*.txt.gz' -exec zcat '{}' \; > /dev/null 0m38.041s 

正如你所看到的,在处理less量文件时,使用find|zcat方法比使用zcat -r要慢得多。 我也无法让zcat输出文件名(使用-v显然会输出文件名,但不是每一行)。 看起来,目前还没有一种工具可以提供速度和名称与grep的一致性(即-H选项)。

如果您需要识别结果所属文件的名称,那么您需要编写自己的工具(可以在50行Python代码中完成)或使用较慢的方法。 如果您不需要识别名称,则使用zcat -r

希望这可以帮助

find . -name "*.gz"|xargs zcat | grep "pattern" find . -name "*.gz"|xargs zcat | grep "pattern"应该做的。