Gibt es ein Namensanalyse-Tool, das Teil des offiziellen RPM-Tool-Pakets ist?
Ich habe eine Liste mit Dateinamen. Jeder ist der Dateiname eines RPM-Pakets. Ich habe nicht die tatsächlichen Pakete, nur die Dateinamen. Für jedes muss ich den Paketnamen und die Version ($ NAME und $ VERSION) extrahieren. Der Grund, warum ich das brauche, ist, dass ich ein Skript schreibe, das dann sicherstellt, dass "yum install $ VERSION" $ VERSION installiert. Dies ist Teil eines Systems, das Pakete erstellt und überprüft, ob sie ordnungsgemäß hochgeladen wurden.
Die Liste der Dateinamen sieht folgendermaßen aus:
$ 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
Ich fand den folgenden Code, der eine BASH-Funktion ist, die die Aufgabe erledigt:
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
Es klappt. Meistens. Es gibt einige Ausnahmen:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Beachten Sie, dass es nicht die richtige Version bekommen hat (es sollte 1.0-99 sein)
Ich frage mich (1), ob das rpmdev-Paket ein Tool enthält, das dies korrekt ausführt. (2) Wenn nicht, gibt es einen offiziellen regulären Ausdruck, den ich verwenden könnte. (3) Was ist das Python-Äquivalent zu diesem Regex?
Danke im Voraus!