コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ディレクトリに含まれるファイルを拡張子別にカウントするRubyのコードを書いてみた

ググったらWindowsでの知見しか出てこないので、Rubyでサクッと作ってみた。Macならこれを書き換えればカウントできます。

環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]

コード

require 'find'

# @param [String] target_path ファイルを計測したい親のパス
# @return [Hash] Keyに拡張子、valueにカウント数が入ったHash
def extname_count_hash(target_path)
  hash = {}
  Find.find(target_path) do |path|
    # ディレクトリの場合はスキップする
    next if FileTest.directory?(path)
    extname = File.extname(path)
    hash[extname] = 0 unless hash.has_key?(extname)
    hash[extname] += 1
  end
  hash
end

※ちなみに .gitignore みたいな . 始まりのファイルや、拡張子がないものは "" としてカウントされます。

使い方

こんなメソッドを用意して

def write_csv(target_path,output_file_path)
  File.open(output_file_path,"w") do |out_f|
    extname_count_hash(target_path).each do |key, value|
      out_f.write "#{key},#{value}\n"
    end
  end
end
write_csv("./","test.csv")

こんな感じで書き出せばいい感じでCSVが出力できます。

参考サイト