Проверка (rpm -qp) нескольких файлов RPM, каждый из которых упакован в отдельный файл TAR

Проверка (rpm -qp) нескольких файлов RPM, каждый из которых упакован в отдельный файл TAR

Мне было интересно, какие наилучшие решения можно использовать для извлечения каждого RPM-файла из списка пакетов TAR и получения информации о пакете из этих файлов.

Итак, у меня есть список пакетов tar в каталоге, содержащий по крайней мере один RPM. Для них я попробовал самое простое решение — циклический обход, извлечение и затем пик в каждом пакете RPM с помощью скрипта bash, что занимает значительное количество времени, учитывая, что пакетов 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-архива?
  • Как изменить указанную выше команду для работы с одним пакетом TAR, содержащим несколько RPM?

решение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 вызываеткомандаи перенаправляет содержимое файлов на свой стандартный вывод.командаможет содержать аргументы командной строки (более подробную информацию см. в разделе Выполнение внешних команд).

Заметить, чтокомандавыполняется один раз для каждого извлеченного обычного файла. Необычные файлы (каталоги и т.п.) игнорируются при использовании этой опции.

Связанный контент