¿Existe una herramienta de análisis de nombres que sea parte del paquete oficial de herramientas RPM?
Tengo una lista de nombres de archivo. Cada uno es el nombre de archivo de un paquete RPM. No tengo los paquetes reales, solo los nombres de archivo. Para cada uno, necesito extraer el nombre y la versión del paquete ($ NAME y $ VERSION). La razón por la que necesito esto es porque estoy escribiendo un script que luego se asegura de que "yum install $ VERSION" instale $ VERSION. Esto es parte de un sistema que crea paquetes y verifica que estén cargados correctamente.
La lista de nombres de archivo se ve así:
$ cat /tmp/packages.txt
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-el-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-hgk-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/python-redis-2.8.0-2.el6.noarch.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/redis-2.6.16-1.el6.1.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
Encontré el siguiente código, que es una función BASH que hace la tarea:
function parse_rpm() { RPM=$1;B=${RPM##*/};B=${B%.rpm};A=${B##*.};B=${B%.*};R=${B##*-};B=${B%-*};V=${B##*-};B=${B%-*};N=$B;echo "$N $V $R $A"; }
for i in $(</tmp/packages.txt) ; do
parse_rpm $i
done
Funciona. Principalmente. Hay algunas excepciones:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Tenga en cuenta que no obtuvo la versión correctamente (debería ser 1.0-99)
Me pregunto (1) si hay una herramienta en el paquete rpmdev que hace esto correctamente. (2) Si no, ¿hay una expresión regular oficial que pueda usar? (3) ¿Cuál es el equivalente en python de esa expresión regular?
¡Gracias por adelantado!