Shammer's Philosophy

My private adversaria

Fileのタイムスタンプを比較する

システムの現在の時間は、date コマンドで取得できる。Localeによって表示のされ方は異なると思われるが、自分の環境では「曜日・月・日・時刻・タイムゾーン・西暦」というような順番で表示される。

$ $ date
Sat Apr 13 11:28:39 JST 2013
$ 

そして、ファイルのタイムスタンプは stat -x $FILE で取得できる。

$ cd /tmp
$ touch TEST
$ stat -x TEST
  File: "TEST"
  Size: 0            FileType: Regular File
...
Access: Sat Apr  13 11:31:31 2013
Modify: Sat Apr  13 11:31:31 2013
Change: Sat Apr  13 11:31:31 2013
$ 

ModifyとChangeの違いがよくわからないが。とりあえず、Changeと現在の日時を比較し、本日に更新されたものかどうかを判定させてみた。

$ if [ `stat -x TEST | grep Change | awk '{print $2 $3 $4}'` = `date | awk '{print $1 $2 $3}'` ];then echo "OK";fi
OK
$ 

西暦は比較していないが、そもそもこれをやろうとしたのは毎日一度だけログイン時に何かしたい、というときに、すでにその何かを本日実行したかどうかを判定するための案で考えたこと。西暦は比較していないが、ここでelseのブロックにその「何か」を書いておけば、必然的にそうなる。とりあえずはこれで問題なさそうだ。