在 tar 文件中搜索某个模式,并打印找到的内容的完整路径

在 tar 文件中搜索某个模式,并打印找到的内容的完整路径

我有包含许多 tar 文件的目录树。每个 tar 文件都包含许多其他文件。我想搜索所有 tar 文件以查找给定的模式,然后打印完整路径在 tar 中找到的所有文件。

我到目前为止: find . -type f -name '*.tar' -exec tar tf {} \; | egrep '<pattern>'

现在我的问题是,上述命令仅打印它在 tar 中找到的文件的名称。即,上述输出为:
pattern.jpg foundMe.txt

我希望输出还包含文件的完整路径和 tar 名称。我该怎么做?

谢谢你!

答案1

当然,剧情在某个地方丢失了:$

我在 jar 文件中也遇到了类似的问题,正在寻找 Java 类。过去常常这样做:捕获每个输出,tar tf|grep <pattern>然后查看输出是否包含值 - 如果是,则打印名称 ( $f) 和值 ( $p):

find . -name '*.tar' -type f|while read f; do p="$(tar tf $f|egrep <pattern>)"; [ -n "$p" ] && echo -e "$f\n$p" ; p=""; done

切换查找参数的顺序——在文件类型之前查看文件名更便宜。

相关内容