2013-04-04

linuxでディレクトリごとのサイズをhuman readableな単位でソートして表示する

例えば、配下のディレクトリの容量を含めず純粋にそのディレクトリに含まれているファイルの合計サイズが大きなディレクトリの上位5件を知りたい場合

普通にやってしまうと単位を考慮したソートがなされない
$ du -hS /* | sort -nr | head -5
1020K   /aaa
1020K   /bbb
1020K   /ccc
1016K   /ddd
1012K   /eee

-hオプションで単位をつけなかった場合と結果が違う
$ du -S /* | sort -nr | head -5
36643580  /vvv
4846020   /www
4198408   /xxx
3348584   /yyy
664132    /zzz
そこで、シェルスクリプトでごにょごにょしてみた
$ du -S /* | sort -nr | 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 | head -5
34G     /vvv
4G      /www
4G      /xxx
3G      /yyy
648M    /zzz
めでたし、めでたしヾ(*・ω・)シ

0 件のコメント:

コメントを投稿