How to list rpm packages/subpackages sorted by total size
- by smci
Looking for an easy way to postprocess rpm -q output so it reports the total size of all subpackages matching a regexp, e.g. see the aspell* example below.
(Short of scripting it with Python/PERL/awk, which is the next step)
(Motivation: I'm trying to remove a few Gb of unnecessary packages from a CentOS install,
so I'm trying to track down things that are a) large b) unnecessary and c) not dependencies of anything useful like gnome.
Ultimately I want to pipe the ouput through sort -n to what the space hogs are, before doing rpm -e)
My reporting command looks like [1]:
cat unwanted | xargs rpm -q --qf '%9.{size}  %{name}\n'  > unwanted.size
and here's just one example where I'd like to see rpm's total for all aspell* subpackages:
  root#  rpm  -q --qf '%9.{size}  %{name}\n' `rpm -qa | grep aspell`
  1040974               aspell
 16417158               aspell-es
  4862676               aspell-sv
  4334067               aspell-en
 23329116               aspell-fr
 13075210               aspell-de
 39342410               aspell-it
  8655094               aspell-ca
 62267635               aspell-cs
 16714477               aspell-da
 17579484               aspell-el
 10625591               aspell-no
 60719347               aspell-pl
 12907088               aspell-pt
  8007946               aspell-nl
  9425163               aspell-cy
Three extra nice-to-have things:
list the dependencies/depending packages of each group (so I can figure out the uninstall order)
Also, if you could group them by package group, that would be totally neat.
Human-readable size units like 'M'/'G' (like ls -h does). Can be done with regexp and rounding on the size field.
Footnote: I'm surprised up2date and yum don't add this sort of intelligence. Ideally you would want to see a tree of group-package-subpackage, with rolled-up sizes.
Footnote 2: I see yum erase aspell* does actually produce this summary - but not in a query command.
[1] where unwanted.txt is a textfile of unnecessary packages obtained by diffing the output of:
yum list installed | sed -e 's/\..*//g' > installed.txt
diff --suppress-common-lines  centos4_minimal.txt installed.txt  | grep '>'
and centos4_minimal.txt came from the Google doc given by that helpful blogger.