Here's a variation on the theme that serves me well.

#!/bin/sh
#
# pkg_nuke - delete unneeded packages
#
# Usage:
#   pkg_info > wanted
#   vi wanted # keep only the lines you want
#   pkg_nuke wanted
#
# All packages will be deleted, except the
# wanted packages and their dependencies.
#

[ $# -ne 1 ] && exit 1

field1 () { awk '{print $1}'; }

wanted=`mktemp -t`
field1 < "$1" | sort > $wanted

a=0
while true; do
        b=`pkg_info | wc -l`
        [ $a -eq $b ] && break
        a=$b
        incidental=`pkg_info | field1 | sort | comm -2 -3 - $wanted`
        for x in $incidental; do pkg_delete $x; done
done

rm $wanted

Reply via email to