Esiste uno strumento di analisi dei nomi che fa parte del pacchetto di strumenti RPM ufficiale?
Ho un elenco di nomi di file. Ognuno è il nome file di un pacchetto RPM. Non ho i pacchetti reali, solo i nomi dei file. Per ognuno ho bisogno di estrarre il nome e la versione del pacchetto ($ NAME e $ VERSION). Il motivo per cui ho bisogno di questo è che sto scrivendo uno script che quindi si assicura che "yum install $ VERSION" installi $ VERSION. Questo fa parte di un sistema che crea pacchetti e verifica che siano caricati correttamente.
L'elenco dei nomi dei file è simile a:
$ 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
Ho trovato il seguente codice che è una funzione BASH che svolge il compito:
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
Funziona. Soprattutto. Ci sono alcune eccezioni:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Si noti che non ha ottenuto la versione correttamente (dovrebbe essere 1.0-99)
Mi chiedo (1) se c'è un tool nel pacchetto rpmdev che lo fa correttamente. (2) In caso contrario, esiste una regex ufficiale che potrei usare. (3) Qual è l'equivalente in pitone di quel regex?
Grazie in anticipo!