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 文件批量提取到標準輸出並查看 RPM 文件嗎?
- 我可以在不從 TAR 包中提取文件的情況下執行此操作嗎?
- 如何修改上述命令以使用包含多個 RPM 的單個 TAR 包?
鑑於該
rpm
命令可以正確處理一個文件,stdin
並且在涉及多個文件時會失敗,因此以下方法是一種潛在的解決方案。使用 GNU
tar
,您可以使用該--to-command
選項將每個文件的內容髮送到rpm
命令。tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'
從手冊:
--to-command=command
提取文件並將其內容通過管道傳輸到command的標準輸入。使用此選項時,tar 不會創建指定的文件,而是呼叫命令並將文件的內容通過管道傳輸到其標準輸出。該命令可能包含命令行參數(有關更多詳細資訊,請參閱執行外部命令)。
請注意,對於提取的每個正常文件,該命令都會執行一次。使用此選項時會忽略非正常文件(目錄等)。