概要
日付形式のファイル名をインクリメントして新規ファイルを作成
詳細
任意のフォルダ内にある「YYYYMMDD_ファイル名.txt」という
命名ルールのファイルを最大の日付+1日で新規追加する。
サンプルコード
# encoding: Windows-31J require "date" require "pp" class File # ファイル名、桁数、拡張子を引数に指定 def File.get_next_date_file_name(base_filename) dates = [] # 指定した形式のファイルリストを取得 Dir.glob( base_filename ) do |file| # 指定した形式のファイルリストを取得 date = Date::new(file.slice(0, 4).to_i, file.slice(4, 2).to_i, file.slice(6, 2).to_i) dates << date end if (dates.size == 0) # 1ファイルも存在しない場合は、カレント日付で1ファイル目を作成 dates << Date.today last_date_file = nil next_date_file = dates[0].strftime("%Y%m%d") + base_filename.sub("*","") else dates.reverse! last_date = dates[0] last_date_file = dates[0].strftime("%Y%m%d") + base_filename.sub("*","") next_date_file = last_date.succ.strftime("%Y%m%d") + base_filename.sub("*","") end file_set = [last_date_file, next_date_file] return file_set 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_date_file_name("*_daily\.txt") copy_file(file_set[0], file_set[1])
出力
1回目実行(カレント日付のファイルが作成される)
$ls | grep _daily 20121122_daily.txt
2,3,4回目実行(インクリメントの確認)
$ls | grep _daily 20121122_daily.txt 20121123_daily.txt 20121124_daily.txt 20121125_daily.txt