Sortieren beim Befehl DU

Ich habe schon öfter nach einer Möglichkeit gesucht, die Ausgabe des Linux-Befehls „du“ mit dem Parameter “-h” (für human-readable) sortiert, nach der Größe ausgeben zu lassen. Sortieren ohne die Option “-h” ist kein Problem. Dann wird die Ausgabe von „du“ standardmäßig nach KB sortiert.

du /var --max-depth=1 |sort -nr
686528 /var
575840 /var/lib
62848 /var/log
46628 /var/cache
872 /var/adm
156 /var/spool
128 /var/run
28 /var/lock
8 /var/tmp
4 /var/X11R6
4 /var/opt
4 /var/games
4 /var/crash

Mit dem Parameter –block-size=1M oder –block-size=1G kann man noch die Einheit der Größenangabe festlegen.

du /var --block-size=1M --max-depth=1 |sort -nr
6729 /var
5237 /var/lib
1021 /var/cache
412 /var/log
54 /var/www
7 /var/backups
1 /var/tmp
1 /var/spool
1 /var/opt
1 /var/mail
1 /var/local

Was aber immer noch fehlt ist die sortierte Ausgabe mit flexiblen, je nach Ordnergröße angepassten, “Human Readable (wie KB MB GB)” Größenangaben. Dies lässt sich durch eine Kombination von du sort cut xargs und wieder  du erreichen.

du /var/ --max-depth=1 | sort -nr | cut -f2 | xargs -n 1 du -hs
6,6G /var/
5,2G /var/lib
1023M /var/cache
413M /var/log
54M /var/www
6,5M /var/backups
72K /var/spool
4,0K /var/tmp
4,0K /var/opt
4,0K /var/mail
4,0K /var/local