我有包含许多 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
切换查找参数的顺序——在文件类型之前查看文件名更便宜。