Inspeccionar (rpm -qp) varios archivos RPM, cada uno incluido en diferentes archivos TAR

Inspeccionar (rpm -qp) varios archivos RPM, cada uno incluido en diferentes archivos TAR

Me preguntaba cuáles son las mejores soluciones posibles para extraer cada archivo RPM de una lista de paquetes TAR y obtener la información del paquete de esos archivos.

Entonces, tengo una lista de paquetes tar en un directorio que contiene al menos un RPM. Para estos, probé la solución más simple para recorrer, extraer y luego alcanzar el pico en cada paquete RPM usando un script bash, lo que lleva una cantidad significativa de tiempo dado que los paquetes TAR tienen más de 20+.

También probé la extracción masiva usando cat *.tar | tar -xvf - -i, luego rpm -qp #list of filespara obtener los nombres de los paquetes, lo que me dio una mejora con respecto a mi último enfoque.

Sé que puedo echar un vistazo al paquete TAR y obtener el nombre del archivo .rpm, pero como el nombre del archivo que contiene un paquete no tiene nada que ver con el nombre del paquete, también necesito verificar el paquete RPM.

La solución más cercana que pude intentar fue:

# 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

lo cual es bastante rápido, pero no brinda información correcta si un paquete TAR contiene más de un archivo RPM.

Entonces lo que pregunto es:

  • ¿Puedo extraer de forma masiva todos los archivos TAR a la salida estándar y echar un vistazo a los archivos RPM?
  • ¿Puedo realizar esta operación sin extraer los archivos del paquete TAR?
  • ¿Cómo puedo modificar el comando anterior para que funcione con un único paquete TAR que contenga múltiples RPM?

Respuesta1

Dado que el rpmcomando puede procesar correctamente un archivo stdiny falla cuando hay varios archivos involucrados, el siguiente enfoque es una posible solución.

Con GNU tar, puedes usar la --to-commandopción para enviar el contenido de cada archivo al rpmcomando.

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

Desde elmanual:

--to-command=command

Extraiga archivos y canalice su contenido a la entrada estándar dedominio. Cuando se utiliza esta opción, en lugar de crear los archivos especificados, tar invocadominioy canaliza el contenido de los archivos a su salida estándar. Eldominiopuede contener argumentos de línea de comando (consulte Ejecución de comandos externos, para obtener más detalles).

Darse cuenta dedominiose ejecuta una vez por cada archivo normal extraído. Los archivos no regulares (directorios, etc.) se ignoran cuando se utiliza esta opción.

información relacionada