拡張子ごとのファイルリスト
30分プログラム、その84。
拡張子ごとにファイル数を数えるプログラム。そこはかとなく、パイプでlsとかを繋げばできる気がしてる。
ファイルを整理するごとに、拡張子だけを取り出して確認したがったので。
$ ruby -w ext.rb * * :[================= ] (bible,cat,db,dict,...) *.awk :[== ] (ls.awk,rawk.awk) *.bmp :[= ] (ChiPet.bmp) *.css :[= ] (flist.css) *.dat :[= ] (hiki_fortune.dat) *.db :[= ] (foo.db) *.hs :[========== ] (coin.hs,lisp.hs,n-gram.hs,part_sum.hs,...) *.html :[= ] (flist.html) *.ico :[= ] (favicon.ico) *.ml :[== ] (lisp.ml,s_exp.ml) *.pdf :[= ] (ruby.pdf) *.pl :[================= ] (3n1.pl,busybox.pl,cgi.pl,croquis_list.pl,...) *.png :[= ] (hatena.png) *.py :[===================== ] (RSS.py,basename.py,color.py,colorgrep.py,...) *.rb :[=======================] (amb.rb,bezier.rb,blur.rb,designp.rb,...) *.scm :[=============== ] (args.scm,clean.scm,clist.scm,coin.scm,...) *.sed :[= ] (hw.sed) *.sh :[= ] (self.sh) *.txt :[====== ] (3n1.txt,gpl.txt,input.txt,keitai_sample.txt,...) *.xml :[= ] (musiclist.xml)
#!/opt/local/bin/ruby -w extensions = Hash.new{|hash,key| hash[key] = [] } ARGV.each{|filename| ext = File.extname(filename) if extensions.key? ext then extensions[ext] << filename else extensions[ext] = [filename] end } max = extensions.map{|_,files| files.size }.max extensions.keys.sort.each{|ext| files = extensions[ext].sort files_list = files.size > 3 ? files[0..3].join(',')+',...' : files.join(',') size = files.size bar = ('=' * size) + (' ' * (max - size)) puts "*#{ext}\t:[#{bar}] (#{files_list})" }
- map+maxは、1.9ならmax_byでいけるんだろうな
- タブによる位置合せよりも、もっと賢い方法が欲しいな
- さっそく_を使っていみた。いいね