Jeder, der schon mal nach großen Platzverschwendern gesucht hat, kennt vermutlich das Tool du .

Dort lässt sich mit den Parametern -s und -k und einem Pipe nach sort sich nach Größe sortieren, aber mir fällt es immer etwas schwer zu erkennen, sind das noch MB oder schon GB?

Beispiel

1du -sk /usr/* 2>/dev/null| sort -n 

Ausgabe

0	/usr/lib64
0	/usr/sbin
40	/usr/local
96	/usr/src
393732	/usr/include
484820	/usr/lib32
1337084	/usr/bin
4228972	/usr/share
8205192	/usr/lib

Schönere Ausgabe

Persönlich finde ich die obige Ausgabe nicht schön zu lesen. Mittels des Tools numfmt lässt sich das etwas hübsche aufbereiten.

Wichtig hierbei ist, dass der Parameter -b statt -k verwendet wird.

1du -sb /usr/* | sort -n | numfmt --to=iec
3 /usr/lib64
3 /usr/sbin
1,1K /usr/local
79K /usr/src
300M /usr/include
472M /usr/lib32
1,3G /usr/bin
3,5G /usr/share
7,6G /usr/lib

In Spalten bitte

Mittels column lässt sich sogar noch eine Spaltigkeit herstellen

1du -sb * | sort -n | numfmt --to=iec | column -t 
3     /usr/lib64
3     /usr/sbin
1,1K  /usr/local
79K   /usr/src
300M  /usr/include
472M  /usr/lib32
1,3G  /usr/bin
3,5G  /usr/share
7,6G  /usr/lib

In “alias” auslagern

Damit man sich den Befehl nicht merken muss, kann dies in ein bash-Alias ausgelagert werden, zum Beispiel so:

1alias sft="sort -n | numfmt --to=iec | column -t"

Würde dann später so aussehen.

1du -sb /usr/* | sft
0     /usr/lib64
0     /usr/sbin
40    /usr/local
96    /usr/src
385K  /usr/include
474K  /usr/lib32
1,3M  /usr/bin
4,1M  /usr/share
7,9M  /usr/lib

Ewentewell lagert man das du-Kommando ebenfalls aus, da ich gerne den Parameter -b

1function sft()
2{
3    du -sb "$@" | sort -n | numfmt --to=iec | column -t
4}

Ja, ich weiß, es gibt ncdu; ggf. geht damit auch was; ewentewell sogar in Scripten.

Habe per Zufall numfmt entdeckt und brauchte es in einen anderen Kontext und wollte mal zeigen, was damit möglich ist.