我有多个 *.tar.gz 文件。它们都包含文件名为 a、b 和 c 的文件。有没有办法仅从这些多个 *.tar.gz 文件下的文件 b 中 grep 字符串“foo”,而不提取文件。
答案1
假设“不提取”的意思是“不将提取的文件保存到磁盘”:
for file in *.tar.gz ; do
tar xzOf $file b | grep --label=$file/b -H foo
done
焦油选项:
x
在将转储提取到标准输出之前提取
z
gunzip
O
,而不是
f
从指定的tar文件创建文件(大写字母哦,不是数字零)
grep 选项(JJoao 建议)
--label=...
使用指定的标签作为文件名
-H
打印每个匹配的文件名
答案2
该命令zgrep
适用于 .tar.gz 文件,无需提取内容。