Особо нетерпеливых прошу проскролить в низ поста, там жирным выделена финальная версия скрипта. Остальным же предлагаю почитать как я к этому пришел.
Если кому-то непонятно зачем это вот пример:
$ ls nano*
nano-2.0.1.tar.gz nano-2.0.2.tar.gz nano-2.0.3.tar.gz nano-2.0.4.tar.gz nano-2.0.6.tar.gz nano-2.1.5.tar.gz
$ emerge -p nano
[ebuild R ] app-editors/nano-2.1.5
Очевидно, что из всех этих файлов можно оставить только nano-2.1.5.tar.gz, на случай если надо будет пересобрать пакет, а все остальное поудалять нахрен.
Сразу хочу отметить, что перед экзекуцией крайне желательно привести систему в порядок:
# emerge -uDavN world
# revdep-rebuild
Итак, приступим. Для начала нам надо найти все дистрибутивы установленных пакетов. Поможет нам в этом emerge -epf world, которая выдаст нам список линков на загрузку всего, что что стоит в системе, а файлы мы найдем так:
$ emerge -epf world | grep -oP "^(ht|f)tp(s?):\/\/[^\s]*" | sed -r "s/^.*\/(.*?)$/\1/g
Чтобы получить расстрельный список надо сравнить этот список с листингом файлов в /usr/portage/distfiles/ и выкинуть из него общие и уникальные для этого списка коммандой comm:
$ comm -13 <(printf '%s\n' "$(emerge -epf world|grep -oP "^(ht|f)tp(s?):\/\/[^\s]*"|sed -r "s/^.*\/(.*?)/\\1/g")") <(printf '%s\n' "$(ls /usr/portage/distfiles/)")
Ну и последний штрих - отправляем файлы в топку.
В итоге получаем такой скрипт:
$ cd /usr/portage/distfiles
$ comm -13 <(printf '%s\n' "$(emerge -epf world |grep -oP "^(ht|f)tp(s?):\/\/[^\s]*"|sed -r "s/^.*\/(.*?)/\\1/g")") <(printf '%s\n' "$(ls /usr/portage/distfiles/)") | xargs sudo rm
Вот такой "красивый" способ .Если кто-то захочет потестировать предложенный метод - отпишитесь в комментах.Ну и если этот скрипт удалит что-то нужное или снесет всю систему - я не виноват ;)
Удачи
