如何在 tar.gz 文件列表中执行相当于“grep something * -Rin”的操作?

719*_*016 5 grep tar gz

我有一堆 tar.gz 文件,我想做一个“grep something * -Rin”,就像如果它们不是 tar.gzed 一样。我想将它们按原样保留 tar.gzed,但在运行时对它们进行 grep 并找到带有前缀文件和行号的 grep 出现。

就像是:

grep mytoken1 *.tar.gz -Rin

并得到类似的东西:

my1.tar.gz,dir1/file2:123:mytoken1 在这一行  
my2.tar.gz,dir2/file3:233:mytoken1 也在另一行  
[...]  

有没有办法做到这一点?

Joe*_*Joe 5

zgrep(或者,我们相信,带有 -Z 标志的 grep)可以让你 grep 压缩文件,我认为它会告诉你很多你想要的东西,但这不会给你文件名而不需要更多的工作来查看标题:(


M'v*_*'vy 0

我认为这会非常棘手。

事实上,tar 基本上是其所有包含文件的串联,并添加了标头。因此基本上grep-in-tar可以编写一个函数来处理这个问题并提供有关文件和行号的信息(带有标题读取和行号减法的基本 grep)。我没有听说过这样的程序。

问题出在 gzip 上。这是一种压缩格式,因此如果您想访问内容,则需要对其进行解压缩。

gunzip -c files.tgz | grep-in-tar
Run Code Online (Sandbox Code Playgroud)

将是一种做你想做的事的方法。目前您可以尝试gunzip -c files.tgz | grep -Rin,但它只会说二进制文件匹配。