Rubyでlinuxのtree似のプログラムを作ってみる

Rubyのお勉強として、linuxコマンドの「tree」を題材にスクリプトを作ってみました。

def tree(path="./", pre=nil)
  unless pre 
    puts path
    pre = "   "
  end
  dir = Dir::entries path
  dir.delete_if {|d| d == "." or d == ".." }
  dir.each do |d|
    last = d == dir.last
    if FileTest::directory? path_d = File.join(path,d)
      puts pre+"+--"+d
      tree path_d, pre+(last ? "   " : "|   ")
    else
      puts pre+(last ? "`" : "|")+"--"+d
    end
  end
end

tree("/etc")

感想

なんとか、それらしいものができました。
小一時間で作れるようになったので自分のRuby力?も付いてきたのかなぁ。
ただ、Rubyらしさが出せたかというとまだまだかなという感じです。
yieldを使って構築できればもう少しRubyらしさが出せるかもしれません。
あと、lastのあたりをもう少しシンプルに書けないものだろうか。

とりあえず、ここまで。