服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

将RPM名称parsing为其组件

有一个名称parsing工具是官方RPM工具包的一部分吗? 我有一个文件名列表。 每个都是RPM包的文件名。 我没有真正的软件包,只有文件名。 对于每个我需要提取包名称和版本($ NAME和$ VERSION)。 我需要这个的原因是我正在写一个脚本,然后确保“yum install $ VERSION”安装$ VERSION。 这是构build包并validation它们已正确上载的系统的一部分。 文件名列表如下所示: $ 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包正确做到了这一点。 […]