Có công cụ phân tích tên nào là một phần của gói công cụ RPM chính thức không?
Tôi có một danh sách tên tập tin. Mỗi cái là tên tệp của gói RPM. Tôi không có các gói thực tế, chỉ là tên tệp. Đối với mỗi tôi cần trích xuất tên và phiên bản của gói ($ NAME và $ VERSION). Lý do tôi cần điều này là vì tôi đang viết một kịch bản để đảm bảo rằng "yum install $ VERSION" sẽ cài đặt $ VERSION. Đây là một phần của hệ thống xây dựng các gói và xác minh chúng được tải lên đúng cách.
Danh sách tên tệp trông giống như:
$ 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
Tôi tìm thấy đoạn mã sau đây là hàm BASH thực hiện nhiệm vụ:
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
Nó hoạt động. Hầu hết. Có một số trường hợp ngoại lệ:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Lưu ý rằng nó không có phiên bản chính xác (phải là 1.0-99)
Tôi đang tự hỏi (1) nếu có một công cụ trong gói rpmdev thực hiện điều này một cách chính xác. (2) Nếu không, có một regex chính thức nào tôi có thể sử dụng. (3) Con trăn tương đương với regex đó là gì?
Cảm ơn trước!