容量消費量の高いサブディレクトリを特定する修行

あるディレクトリ以下で容量消費量が高いところを特定したいけど、どうやって調べればいいのか、という質問。質問してきたのは私のことを「タケさん」でなく「タケユキさん」と呼ぶ数少ない同僚。df じゃおおまかにしか(ファイルシステムごとの値しか)わからないし、du だと再帰的にもぐっちゃって探すのが大変、とのこと。

とりあえず私が、自分ではこうやってやってるよ、と示したのが次のコマンド。

 $ du -s $target_dir | sort -nr | head

で、いつもはこれで様子を見つつ、上位にディレクトリが来ていれば、再帰的に同じコマンドを使ったりする。

この、容量が多いサブディレクトリを再帰的に探していく、というのは自動化できると便利化と思った。ゲーム理論的に言えば、容量優先探索みたいな感じかな。未展開の(すなわちディレクトリ)のノードのうち、最大容量のものを展開し、現れた子ノードのうち、ディレクトリはすべて未展開ノードリストに加える、という流れか。終了条件としては、未展開ノードの容量が最初のターゲットディレクトリの容量の 1/10 未満になったら、とか。あるいは前回展開した未展開ノードの容量と、今回展開対象の実展開ノードの容量との差がターゲットディレクトリの容量の 1/100 未満になったら、とか。

で、未展開ノードリストをオンメモリで処理できる shell script を作ろうとして断念。オンメモリという制限をはずすか、perl/python/ruby のどれかで書きゃいいんだけど。やっぱ awk かな。