检查 (rpm -qp) 多个 RPM 文件,每个文件捆绑在不同的 TAR 文件中

检查 (rpm -qp) 多个 RPM 文件,每个文件捆绑在不同的 TAR 文件中

我想知道从 TAR 包列表中提取每个 RPM 文件并从这些文件中获取包信息的可能最佳时间案例解决方案。

因此,我在一个目录中有一份 tar 包列表,其中至少包含一个 RPM。对于这些,我尝试了最简单的解决方案,使用 bash 脚本循环、提取并峰值到每个 RPM 包中,考虑到 TAR 包超过 20 个,这需要花费大量时间。

我还尝试使用 进行批量提取cat *.tar | tar -xvf - -i,然后 rpm -qp #list of files获取包名称,这比上一种方法有所改进。

我知道我可以查看 TAR 包并获取 .rpm 文件名,但由于包含包的文件的名称与包的名称无关,因此我还需要检查 RPM 包。

我可以尝试的最接近的解决方案是:

# given tarball-containing-wget-rpm-package.tar.gz contains wget.rpm 

bash$ time (cat tarball-containing-wget-rpm-package.tar.gz|gunzip|tar --wildcards --extract '*.rpm' --to-stdout|rpm -qp /dev/stdin)
wget-1.11.4-1.40.1

real    0m0.049s
user    0m0.044s
sys     0m0.004s

这相当快,但如果 TAR 包包含多个 RPM 文件,则无法提供正确的信息。

所以,我要问的是:

  • 我可以将所有 TAR 文件批量提取到 stdout 并查看 RPM 文件吗?
  • 我可以在不从 TAR 包中提取文件的情况下执行此操作吗?
  • 如何修改上述命令以使用包含多个 RPM 的单个 TAR 包?

答案1

鉴于该rpm命令可以正确处理一个文件stdin,但在涉及多个文件时会失败,以下方法是一种潜在的解决方案。

使用 GNU tar,您可以使用该--to-command选项将每个文件的内容发送到rpm命令。

tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'

来自手动的

--to-command=command

提取文件并将其内容通过管道传输到标准输入命令。使用此选项时,tar 不会创建指定的文件,而是调用命令并将文件的内容通过管道传输到其标准输出。这命令可能包含命令行参数(有关更多详细信息,请参阅运行外部命令)。

注意,那命令对于提取的每个常规文件执行一次。使用此选项时,非常规文件(目录等)将被忽略。

相关内容