How can I sort du -h output by size
Solution 1:
As of GNU coreutils 7.5 released in August 2009, sort
allows a -h
parameter, which allows numeric suffixes of the kind produced by du -h
:
du -hs * | sort -h
If you are using a sort that does not support -h
, you can install GNU Coreutils. E.g. on an older Mac OS X:
brew install coreutils
du -hs * | gsort -h
From sort
manual:
-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
Solution 2:
du | sort -nr | cut -f2- | xargs du -hs
Solution 3:
@Douglas Leeder, one more answer: Sort the human-readable output from du -h using another tool. Like Perl!
du -h | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.]+)(\D)/;
return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'
Split onto two lines to fit the display. You can use it this way or make it a one-liner, it'll work either way.
Output:
4.5M .
3.7M ./colors
372K ./plugin
128K ./autoload
100K ./doc
100K ./syntax
EDIT: After a few rounds of golf over at PerlMonks, the final result is the following:
perl -e'%h=map{/.\s/;99**(ord$&&7)-$`,$_}`du -h`;die@h{sort%h}'
Solution 4:
There is an immensely useful tool I use called ncdu that is designed for finding those pesky high disk-usage folders and files, and removing them. It's console based, fast and light, and has packages on all the major distributions.
Solution 5:
du -k * | sort -nr | cut -f2 | xargs -d '\n' du -sh