概要
YYYYMM_+任意の文字列形式のファイル名をインクリメントして新規ファイルを作成
詳細
任意のフォルダ内にある「YYYYMM_ファイル名.txt」という
命名ルールのファイルを最大の日付+1ヶ月で新規追加する。
サンプルコード
# encoding: Windows-31J require "date" require "pp" class File # ファイル名、桁数、拡張子を引数に指定 def File.get_next_month_file_name(base_filename) dates = [] # 指定した形式のファイルリストを取得 Dir.glob( base_filename ) do |file| # 指定した形式のファイルリストを取得 dates << Date::new(file.slice(0, 4).to_i, file.slice(4, 2).to_i, "01".to_i) end sufix_name = base_filename.sub("*","") if (dates.size == 0) # 1ファイルも存在しない場合は、カレント日付で1ファイル目を作成 dates << Date.today last_date_file = nil next_date_file = Date.get_year_month_format(dates[0]) + sufix_name else dates.reverse! last_date = dates[0] last_date_file = Date.get_year_month_format(dates[0]) + sufix_name next_date_file = Date.get_year_month_format(last_date >> 1) + sufix_name end file_set = [last_date_file, next_date_file] return file_set end end class Date def Date.get_year_month_format(date) return date.strftime("%Y%m") end end def copy_file(from_file ,to_file) if (from_file) open(from_file) do |input| open(to_file, "w") do |output| output.write(input.read) end end else open(to_file, "w") end end file_set = File.get_next_month_file_name("*_todo.txt") copy_file(file_set[0], file_set[1])
出力
1回目実行(カレント日付のファイルが作成される)
$ls | grep _todo 201302_todo.txt
2,3,4回目実行(インクリメントの確認)
$ls | grep _todo 201302_todo.txt 201303_todo.txt 201304_todo.txt 201305_todo.txt