あるファイルがn日以上更新されてないか調べる方法

find -mtime を使う

# 最終更新から 24 時間以上経過しているか
if [[ "$(find /path/to/file -mtime +0)" != "" ]]; then
  echo 'OLD!'
else
  echo 'NEW!'
fi

-mtime +0 がなぜ「24時間以上前」になるのか?について:

-mtime n
  ファイルの最終内容更新日時が、基点となる時刻から計算して n 日前に当たれば、真を返す (訳注: 基点となる時刻は、デフォルトでは find を実行している今現在である)。
  (snip)
  なお、デフォルトの動作のように、現在時刻から数えて 24 時間前から 48 時間前までを 1 日前とする

つまり、

  • 1日前 = 24時間前から48時間前

なので、

  • n日前 = n*24時間前から(n+1)*24時間前

つまり、

-mtime 0 = 最終更新が0日前 =  0時間前から24時間前
-mtime 1 = 最終更新が1日前 = 24時間前から48時間前
-mtime 2 = 最終更新が2日前 = 48時間前から72時間前

次に n の記法について。

数値の引き数は、以下の形で指定することができる。

+n
  n より大きい。
-n
  n より小さい。
n
  ちょうど n。

なので、

  • -mtime +0
  • = -mtime 1 または -mtime 2 または ...
  • = 最終更新が0日前より過去
  • = 24時間前より過去

となる。

ほかにイケてる方法があったら教えてください!!><