容量の多いディレクトリを再帰的に表示するシェルスクリプト
ディスク容量が足りなくなったとき、容量の多いディレクトリなりファイルなりを圧縮したり、別の媒体に移したりしたくなる。そんなときには du -s で容量を調べ、容量の多いディレクトリを見つけたらそのディレクトリを対象に du -s で容量を調べ、ということをしたりする。え、そんなことしてるの? というツッコミがあればそれはそれで嬉しい。ともかく、よくそんなことをしているので、それを自動的にやってくれるシェルスクリプトを書いてみた。テスト全然してないから間違いがあるかもしれない。スクリプト中の head -20 も適当。
tmp1=/tmp/$$.1 tmp2=/tmp/$$.2 dir=${1:-.} loop=${2:-10} du -k -s $dir > $tmp1 touch $tmp2 debug=1 while [ $loop -gt 0 ] ; do line=`head -1 $tmp1` kb=${line% *} entry=${line#* } echo $kb $entry; n=`wc -l $tmp1` n=${n% *} n=$(($n-1)) tail -$n $tmp1 > $tmp2 if [ -d $entry ] ; then du -k -s $entry/* | sort -k1,1nr | head -20 >> $tmp2 fi sort -k1,1nr $tmp2 > $tmp1 loop=$(($loop-1)) done rm $tmp1 $tmp2
第一引数に調査対象のディレクトリ (省略時はカレントディレクトリ)、第二引数に上位何件まで表示するか (省略時は 10) を指定する。
実行例
[takeyuki@sunya ~]$ bin/rdu.sh work 20