Sort directories by size

# (A)
# Commands used: du, sort, awk
# It is fast.
du --max-depth=1 -k * | sort -nr | awk '{ if($1>=1024*1024) {size=$1/1024/1024; unit="G"} else if($1>=1024) {size=$1/1024; unit="M"} else {size=$1; unit="K"}; if(size<10) format="%.1f%s"; else format="%.0f%s"; res=sprintf(format,size,unit); printf "%-8s %s\n",res,$2 }'
# (B)
# Commands used: du, sort, cut, xargs
# It is slow because it uses "du" twice.
du --max-depth=1 -k | sort -nr | cut -f2 | xargs -d '\n' du -sh 2>/dev/null
# (C)
# Commands used: du, sort
# It requires GNU coreutils >= 7.5 because of 'sort -h'
du --max-depth=4 --human-readable | sort -h -r


or simply use the application, NCurses Disk Usage