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
コマンドはrpm
1つのファイルで正しく機能しますstdin
が、複数のファイルが関連している場合は失敗するため、次の方法が潜在的な解決策です。
GNUでは、tar
この--to-command
オプションを使用して各ファイルの内容をrpm
コマンドに送信できます。
tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'
~から手動:
--to-command=command
ファイルを抽出し、その内容を標準入力にパイプします。注文する。このオプションを使用すると、tarは指定されたファイルを生成せずに、代わりに次のものを呼び出します。注文するファイルの内容を標準出力にパイプします。これ注文するコマンドライン引数を含めることができます(詳細については、外部コマンドの実行を参照)。
参考にしてください注文する抽出された各一般ファイルに対して一度実行されます。このオプションを使用すると、非正規ファイル(ディレクトリなど)は無視されます。