LINUX.ORG.RU
Ответ на: комментарий от anonymous

Есть репозитарий пакетов для Ubuntu, нужно удалить устаревшие пакеты.
Пример:
libpanel-applet2-0_2.14.1-0ubuntu16_i386.deb
libpanel-applet2-0_2.14.2-0ubuntu1_i386.deb

Выделяю все после первого "_" и до следующего "_",
удаляю все знаки кроме цифр,
укорачиваю до минимальной длины из двух строк.

Получается 2141016/214201 -> 214101/214201

Проблема будет для ubuntu9 и ubuntu10.
ubuntu10 станет ubuntu1, который меньше ubuntu9.

Хочу добивать строку справа до максимальной длины и сравнивать.
Может я не так делаю? Подскажите...

anonymous
()
Ответ на: комментарий от anonymous

> Проблема будет для ubuntu9 и ubuntu10. ubuntu10 станет ubuntu1, который меньше ubuntu9.

> Хочу добивать строку справа до максимальной длины и сравнивать. Может я не так делаю? Подскажите...

Имхо, не так. Меня глючит, или добив справа нулями до максимальной длины, ты будешь сравнивать "ubuntu10" и "ubuntu90", которые также нифига не в правильную сторону сравниваются?

anonymous
()

Как уже справедливо заметили, "добивать" нолями надо справа.
Попробуем просто переделать все имена пакетов так, чтобы
после "ubuntu" всегда стояло скажем 2 цифры:

$ perl -pe 's/ubuntu(\d+)/ubuntu@{[0 x (2-length($1))]}$1/'
libpanel-applet2-0_2.14.2-0ubuntu1_i386.deb
libpanel-applet2-0_2.14.2-0ubuntu01_i386.deb # это вывод скрипта
libpanel-applet2-0_2.14.1-0ubuntu16_i386.deb
libpanel-applet2-0_2.14.1-0ubuntu16_i386.deb # это вывод скрипта
^D
$

Дальнейшая модификация по вкусу ;-)

HTH

Onanim
()
Ответ на: комментарий от Onanim

> Как уже справедливо заметили, "добивать" нолями надо справа.

Тьфу, сам запутался :-))) Имеется ввиду естественно "слева".

Onanim
()
Ответ на: комментарий от friday

Придется удалить все кроме "." и цифр.
Через split разбить на части по ".", каждую часть
добить нулями слева до 2 знаков и склеить.
При расхождении длины двух сверяемых срок добивать справа нулями.

Еще в названиях пакетов бывает дату в конце вставляют x.x.x-ubuntu20060712 ...


anonymous
()
Ответ на: комментарий от anonymous

Как-то ненадежно получается. А может просто файлы по дате отсортировать и не мучаться с разбором имени?

shumer
()
Ответ на: комментарий от vilfred

Вряд ли mtime совпадет для старой и новой версии одного пакета, если репозитарий регулярно обновляется.

shumer
()
Ответ на: комментарий от vilfred

>а если в одну секунду 2 файла создадутся? я бы еще пид процесса воткнул, а после дату.

Удаляются пакеты, с совпадающим именем в начале до знака "_"
(одинаковые по имени, но разные по версии).
Чтобы совпали даты до секунды нужно обновлять Inet репозитарий,
пакеты и искать уязвимости быстрее секунды :)

anonymous
()
Ответ на: комментарий от anonymous

Ну датам не обязательно совпадать. Если обновлять репозитарий редко, большими порциями, то вполне вероятно что в том источнике, откуда ты обновляешься, будет уже две версии пакета. Тогда при копировании файл со старой версией м.б. создан позднее чем файл с новой. Но если обновляться регулярно, по мере выхода пакетов, такого не произойдет.

shumer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.