官方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等效项是什么?
提前致谢!