Existe-t-il un outil d'analyse de nom qui fait partie du package d'outils RPM officiel?
J'ai une liste de noms de fichiers. Chacun est le nom de fichier d'un package RPM. Je n'ai pas les paquets réels, juste les noms de fichiers. Pour chacun, j'ai besoin d'extraire le nom et la version du package ($ NAME et $ VERSION). La raison pour laquelle j'en ai besoin est que j'écris un script qui s'assure ensuite que "yum install $ VERSION" installe $ VERSION. Cela fait partie d'un système qui construit des packages et vérifie qu'ils sont correctement téléchargés.
La liste des noms de fichiers ressemble à:
$ 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
J'ai trouvé le code suivant qui est une fonction BASH qui fait la tâche:
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
Ça marche. La plupart. Il y a quelques exceptions:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Notez qu'il n'a pas obtenu la version correctement (elle devrait être 1.0-99)
Je me demande (1) s'il y a un outil dans le paquetage rpmdev qui le fait correctement. (2) Sinon, y a-t-il une expression officielle que je pourrais utiliser. (3) Quel est l'équivalent python de cette expression régulière?
Merci d'avance!