AIXで指定した更新日付のファイルを生成する

OSがLinuxだと日付を扱う時に*1拡張された「date」コマンドを使えますが、AIXの場合だと使えません。
「TZ」コマンドを使った場合は日単位は指定できますが、分単位、秒単位は指定できません。
そこで「perl」の「localtime」関数を使用するといい感じにできます。

perl」ではtime関数では1970年1月1日からの経過秒数を返すが、
localtimeはtime関数が返す値をローカル時間での年月日時分秒などの要素に変換をする。


http://cocohome.hp.infoseek.co.jp/perl_ref/localtime.html

例として30分前の更新日付のファイルを生成するシェルを用意します。
「time」から指定する時間を秒で指定して下さい。
30分の場合は1800秒になります。

test.sh

#!/bin/sh

CHANGE_TIME=`/usr/bin/perl -e '@T=localtime(time-1800);printf("%d%02d%d%d%02d \n",($T[5] + 1900),($T[4] + 1),$T[3],$T[2],$T[1])'`

touch -t ${CHANGE_TIME} test.txt

実行した結果はこんな感じです。


参考にさせて頂いたサイトはこちらです。
AIXで日付計算 - 自分の仕事を憎むには人生は余りにも短い
現場で困っていたのでとても助かりました。

*1:「-d 'N days ago'」で N 日前の日付を取得できる。