在 tar 文件目录中查找所有包含模式的文件

在 tar 文件目录中查找所有包含模式的文件

我有一个目录中的所有 tar 文件。我想在不提取所有 tar 文件的情况下查找 tar 文件中的某些文件。

我知道如何使用一个 tar 文件:

tar tvf abc.tar | grep xyz

我想在所有 tar 文件中查找但我不知道如何做。

答案1

假设所有 tar 文件名都以 结尾.tar。假设您要在所有这些 tar 文件中查找名称以 结尾的任何文件.dat。基于这些假设,您可以使用:

$ for f in `find . -type f -name "*.tar" -print`; do tar tf $f | grep \.dat > /dev/null && echo $f; done

find命令用于获取.tar文件列表;您最终可能会得到包含文件以外的文件的目录.tar。对于.tar找到的每个文件,列出其目录 ( tar tf),以及grep与我们的模式匹配的名称的目录。

.tar上面的示例命令只是打印出包含与我们的模式匹配的文件的名称;如果你想要查看匹配文件的名称,那么您可以删除> /dev/null该命令的一部分grep

希望这可以帮助!

答案2

我建议你为这个任务创建一个小脚本。类似下面这样:

REGEX="my search string"

find . -type f -name '*.tar' -print0 | while read -r -d $'\0' FILE
do
  # the sed command adds the filename prefix
  tar tf "${FILE}" | grep -- "${REGEX}" | sed "s|^|${FILE}: |"
done

相关内容