RubyでWindowsのtree似のスクリプトを作る
今度は、Windowsの「tree /F」を実行した時の表示と同じようになるようスクリプトを作ってみました。
# coding: cp932 def tree(path="./", pre="") puts path if pre == "" list = Dir::entries path list.delete_if {|d| d =~ /^\./ } dir = list.select {|a| FileTest::directory?(File.join(path,a))} files = list.select {|a| ! FileTest::directory?(File.join(path,a))} files.each do |f| pre_str = pre+(dir.size==0 ? " " : "│ ") puts pre_str+f puts pre_str if f == files.last end dir.flatten.each do |d| last = d == dir.last puts pre+(last ? "└" : "├")+"─"+d tree File.join(path,d), pre+(last ? " " : "│ ") end end tree("c:/work/")
感想
冗長な記述が目立ちますが、まぁそのうち改善するとして、以外に手間がかかりました。
ソートの順番がファイル→ディレクトリの順ってところで悩みました。
結局、select使って分けてみました。
とりあえず、ここまで。