年月でループする
指定した期間の年月ごとにループするシェルスクリプトを作ってみた。意外と面倒くさかった。
用途としては、ログを年月ごとに分けたりとか、ディレクトリを年月ごとに作ったりとか、そんなのに使えると思う。
#!/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