檢查 (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 不會建立指定的文件,而是調用命令並將文件的內容透過管道傳輸到其標準輸出。這命令可能包含命令列參數(有關更多詳細信息,請參閱運行外部命令)。

注意,那命令對於提取的每個常規文件執行一次。使用此選項時,非常規文件(目錄等)將被忽略。

相關內容