himitsu girlsの日記

 | 

2007-01-03

[]16章 練習問題(3)

Unixコマンドのdu

def du(dir)
  size = 0

  Dir.open(dir) {|d|
    d.each {|name|
      path = File.join(dir, name)
      if File.directory?(path)
        next if name == "." or name == ".."
        size += du(path)
      else
        st = File.lstat(path)
        size += st.size
        printf("%6d %s\n", st.size, path)
      end
    }
  }
  printf("%6d %s\n", size, dir)
  return size
end
du(".")

du -ab相当。解答例は同じ再帰なのにシンプルだなぁ。再帰は苦手だ。

トラックバック - http://rubyist.g.hatena.ne.jp/himitsu_girls/20070103
 |