qiita.com
これを見て Ruby でもやってみたくなりました。
実行例
<kaki-utils> ├<lib> │ └<kaki> │ ├<utils> │ │ ├add_methods.rb │ │ ├all.rb │ │ ├check_fname_overlapping.rb │ │ ├es.rb │ │ ├imgsuffix.rb │ │ ├nest_loop.rb │ │ ├po.rb │ │ ├rec_decimal.rb │ │ ├retry.rb │ │ └safe_mkdir.rb │ └utils.rb ├README.md ├kaki-utils-0.0.1.gem ├kaki-utils-0.0.10.gem ├kaki-utils-0.0.2.gem ├kaki-utils-0.0.3.gem ├kaki-utils-0.0.4.gem ├kaki-utils-0.0.5.gem ├kaki-utils-0.0.6.gem ├kaki-utils-0.0.7.gem ├kaki-utils-0.0.8.gem ├kaki-utils-0.0.9.gem ├kaki-utils-0.1.0.gem ├kaki-utils-0.1.1.gem ├kaki-utils-0.1.10.gem ├kaki-utils-0.1.11.gem ├kaki-utils-0.1.12.gem ├kaki-utils-0.1.13.gem ├kaki-utils-0.1.14.gem ├kaki-utils-0.1.15.gem ├kaki-utils-0.1.2.gem ├kaki-utils-0.1.3.gem ├kaki-utils-0.1.4.gem ├kaki-utils-0.1.5.gem ├kaki-utils-0.1.6.gem ├kaki-utils-0.1.7.gem ├kaki-utils-0.1.8.gem ├kaki-utils-0.1.9.gem └kaki-utils.gemspec
コード
元の Python コードはまったく見ていません。簡単な再帰で実装しています。
print_dir_tree.rb
class Dir def self.print_tree(top_dir = Dir.pwd) unless File.directory?(top_dir) raise %("#{top_dir}") + " is not directory." end puts "<#{File.basename(top_dir)}>" walk_dir = ->(dir, pre) { Dir.chdir(dir) rescue return d_f = Dir.glob("*").sort dirs = d_f.select {|df| File.directory?(df)} files = d_f - dirs end_num = d_f.size line_num = 1 dirs.each do |d| s0 = (line_num == end_num) ? "└" : "├" line_num += 1 puts pre + s0 + "<#{d}>" s1 = pre + ((s0 == "└") ? " " : "│ ") walk_dir.(d, s1) end files.each do |f| s = (line_num == end_num) ? "└" : "├" line_num += 1 puts pre + s + f end Dir.chdir("..") } walk_dir.(top_dir, " ") end end if __FILE__ == $0 Dir.print_tree("./kaki-utils/") end