Еще немного улучшил разбор. Теперь архитектура типа i386 i686 x86-64 x64,
указание на xfree типа xf86 XF_86,
указание на библиотеку qt4
всегда включаются в имя, а не в версию.
Linuxdcpp-1.1.0-4-i686-p01.pfs -> Linuxdcpp-.*-i686-.*\.pfs 1.1.0-4-p01
Части имени и версии вполне могут перемежаться.
Paromplayer-p-150126-vlc-2.2.1.pfs -> Paromplayer-p-.*-vlc-.*\.pfs 150126-2.2.1
-p- и авторВерсия разбираются без проблем.
принцип разбора: версией считается часть, начинающаяся после - или _ и состоящая из секций, каждая из которых начинается с не более чем двух букв, за которыми следует как минимум одна цифра, а потом буквы и цифры. Секция завершается . - + _
(то есть -s02- или -sf01- будут относиться к версии, а -sfs03- - уже нет)
Допустимые виды версий: module-0.1.8beta module_v5c3 module-rc1234567a и тому подобное.
Частей версии может быть несколько (Paromplayer-p-150126-vlc-2.2.1.pfs - "150126" и "2.2.1"), все части в итоге объединяются в одну строку версии.
Все, что не относится к версии, а также особые случаи, указанные в начале (i686, xf86, qt4) остается в имени, вырезанные куски с версией заменяются на .*
То есть, если то, что получилось использовать как шаблон grep, найдутся все пакеты с таким именем разных версий.
Для проверки функции разбора сделал скрипт, содержащий только эту функцию: splitnametest.sh.txt
можно сделать так:
cat repolist.txt |while read name ; do ./splitnametest.sh.txt "$name"; done |less
или так
find /mnt/home/pra1511g/ -type f -name "*.pfs" -exec ./splitnametest.sh.txt {} \; |less
и посмотреть, есть ли файлы, какие разберутся неправильно, или просто сделать
./splitnametest.sh.txt hochu-nazvat-modul-tak-0123.4567f.pfs
и посмотреть, разберется ли предлагаемое название.
Пока еще не все просмотрел, но навскидку могу сказать, что переименовать скорее всего придется модули, содержащие в названии версию ядра, например Vbox-5.0.4-full-k4.1.6-pf4-p02.pfs -> Vbox-.*-full-.*\.pfs 5.0.4-k4.1.6-pf4-p02
Проблема в том, что версия ядра тут - это действительно версия и нет никаких признаков, чтобы ее от версии пакета отличить, но в то же время Vbox-5.0.4-full-k4.1.6-pf4-p02.pfs на Vbox-5.0.4-full-k4.3.0-pf4-p02.pfs, к примеру, обновлять нельзя.
По-хорошему, тут разбор должен быть Vbox-.*-full-k4.1.6-pf4-.*\.pfs 5.0.4-p02, но как этого добиться, не представляю,
пожалуй проще все же переименовать в Vbox-5.0.4-full-kmod4.1.6pf4-p02.pfs -> Vbox-.*-full-kmod4.1.6pf4-.*\.pfs 5.0.4-p02
то есть "k" заменить на "kmod" - больше двух букв и "pf4" прилепить без дефиса.
Но по крайней мере модулей, требующих переименования, очень немного.