AIXで指定した更新日付のファイルを生成する
OSがLinuxだと日付を扱う時に*1拡張された「date」コマンドを使えますが、AIXの場合だと使えません。
「TZ」コマンドを使った場合は日単位は指定できますが、分単位、秒単位は指定できません。
そこで「perl」の「localtime」関数を使用するといい感じにできます。
「perl」ではtime関数では1970年1月1日からの経過秒数を返すが、
localtimeはtime関数が返す値をローカル時間での年月日時分秒などの要素に変換をする。
例として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 日前の日付を取得できる。