This is a quick tip to fix a problem that has always bugged me.
When showing disk usage in a human readable form (KB, MB, GB) for each subdirectory using du -sh *
, how can you properly sort it by size.
If you just want the solution here it is as “one-liner”:
function duf {
du -sk "$@" | sort -n | while read size fname; do for unit in k M G T P E Z Y; do if [ $size -lt 1024 ]; then echo -e "${size}${unit}\t${fname}"; break; fi; size=$((size/1024)); done; done
}
Just put this function into your ~/.bashrc
to make it permanent.
[ad name=”Adsense – text only”]
The expanded code:
function duf {
// get usage in KBytes and sort
du -sk "$@" | sort -n | while read size fname;
// loops for each size
do for unit in k M G T P E Z Y;
// if size<1024 we found the correct suffix
if [ $size -lt 1024 ];
// display the size
then echo -e "${size}${unit}\t${fname}";
// line completed
break;
fi;
// for each sizes suffix divide by 1024
size=$((size/1024));
done;
done
}
When done, you can use your new function like this: duf /*
.