#! /bin/bash

# This is a script I wrote to safely clean out obsolete packages
# that are no longer referenced by any ebuild in portage.

# If your portage tree, distfiles, or portdir_overlay are in locations
# other than the norm (/usr/portage, /usr/portage/distfiles,
# /usr/local/portage, respectively), you will need to edit the script
# accordingly.

comm -23 \
    <(find /usr/portage/packages/All -maxdepth 1 -name '*.tbz2' \
      -exec basename \{\} .tbz2 \; \
      | sort) \
    <(find /usr/portage/ /usr/local/portage/ -path '*/*/*.ebuild' \
      -exec basename \{\} .ebuild \; \
      | sort -u) \
    | sed -e 's|^\(.*\)$|/usr/portage/packages/All/\1.tbz2|'
