それぞれが異なるTARファイルにバンドルされている複数のRPMファイルを確認します(rpm -qp)。

それぞれが異なるTARファイルにバンドルされている複数のRPMファイルを確認します(rpm -qp)。

TARパッケージリストから各RPMファイルを抽出し、そのファイルからパッケージ情報を取得するための最良の時間別ソリューションを知りたいです。

したがって、少なくとも1つのRPMを含むディレクトリにtarballリストがあります。そのために、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

コマンドはrpm1つのファイルで正しく機能しますstdinが、複数のファイルが関連している場合は失敗するため、次の方法が潜在的な解決策です。

GNUでは、tarこの--to-commandオプションを使用して各ファイルの内容をrpmコマンドに送信できます。

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

~から手動:

--to-command=command

ファイルを抽出し、その内容を標準入力にパイプします。注文する。このオプションを使用すると、tarは指定されたファイルを生成せずに、代わりに次のものを呼び出します。注文するファイルの内容を標準出力にパイプします。これ注文するコマンドライン引数を含めることができます(詳細については、外部コマンドの実行を参照)。

参考にしてください注文する抽出された各一般ファイルに対して一度実行されます。このオプションを使用すると、非正規ファイル(ディレクトリなど)は無視されます。

おすすめ記事