%20varios%20archivos%20RPM%2C%20cada%20uno%20incluido%20en%20diferentes%20archivos%20TAR.png)
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 files
para 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 rpm
comando puede procesar correctamente un archivo stdin
y falla cuando hay varios archivos involucrados, el siguiente enfoque es una posible solución.
Con GNU tar
, puedes usar la --to-command
opción para enviar el contenido de cada archivo al rpm
comando.
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.