年月でループする

指定した期間の年月ごとにループするシェルスクリプトを作ってみた。意外と面倒くさかった。

用途としては、ログを年月ごとに分けたりとか、ディレクトリを年月ごとに作ったりとか、そんなのに使えると思う。

#!/bin/sh

START_YEAR=2012; START_MONTH=1
END_YEAR=2013; END_MONTH=12

YYYY=$START_YEAR; MM=$START_MONTH

while [ $YYYY -le $END_YEAR -a  $MM -le $END_MONTH ]
do
  YYYYMM=${YYYY}`printf "%02d" ${MM}`
  echo $YYYYMM
  if [[ $MM -eq 12 ]]; then
    MM=1
    YYYY=`expr $YYYY + 1`
  else
    MM=`expr $MM + 1`
  fi
  YYYYMM=${YYYY}`printf "%02d" ${MM}`
done

最初は期間指定するための変数YEARとMONTHをくっつけていたが、都度YEARとMONTHを分離したり結合したりと大変だったので個別に分けて指定する形にした。

rubyで作るとこんな感じ。

require 'date'
(Date.new(2012, 1)..Date.new(2013, 12))
  .select {|d| d.day == 1}
  .each do|d|
     yyyymm = "%04d%02d" % [d.year,d.month]
     puts yyyymm
     # `mkdir #{yyyymm}`
  end