Существует ли инструмент для анализа имен, который является частью официального пакета инструментов RPM?
У меня есть список имен файлов. Каждый является именем файла пакета RPM. У меня нет реальных пакетов, только имена файлов. Для каждого мне нужно извлечь имя пакета и версию ($ NAME и $ VERSION). Причина, по которой я нуждаюсь в этом, заключается в том, что я пишу скрипт, который затем проверяет, что "yum install $ VERSION" устанавливает $ VERSION. Это часть системы, которая создает пакеты и проверяет, правильно ли они загружены.
Список имен файлов выглядит так:
$ 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
Я нашел следующий код, который является функцией BASH, которая выполняет задачу:
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
Оно работает. В основном. Есть несколько исключений:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Обратите внимание, что он не получил версию правильно (она должна быть 1.0-99)
Мне интересно (1) есть ли в пакете rpmdev инструмент, который делает это правильно. (2) Если нет, могу ли я использовать официальное регулярное выражение. (3) Что является эквивалентом Python этого регулярного выражения?
Заранее спасибо!