Bashで日付が90日より古いことを確認する

Bashで日付が90日より古いことを確認する

ユーザーのAWSアクセスキーが90日より古い場合は、セキュリティチームに通知する必要があります。私はこれをbashでやっています。

これまで私のスクリプトから出力されたキーと日付は次のとおりです。

AKIAJS7KPHZCQRQ5FJWA : 2016-08-31T15:38:18Z
AKIAICDOHVTMEAB6RM5Q : 2018-02-08T03:55:51Z

Bashで日付形式を使用して日付が90日より古いかどうかを確認するには?

Ubuntu 18.04を使用しています。日付形式はISO 8601だと思います。エラーがある場合は確認・修正をお願いします。

答え1

GNUを使用してdate日付/時刻文字列を秒に変換できます(1970年1月1日「epoch」以降)。そこで簡単な算術比較が始まります。

datetime='2016-08-31T15:38:18Z'
timeago='90 days ago'

dtSec=$(date --date "$datetime" +'%s')    # For "now", use $(date +'%s')
taSec=$(date --date "$timeago" +'%s')

echo "INFO: dtSec=$dtSec, taSec=$taSec" >&2

[ $dtSec -lt $taSec ] && echo too old

答え2

以下のスクリプトは上記の形式を読み取りますが、既存の変数にすでに値がある場合はコードを結合できます。

#!/bin/bash
cutoff=$(date -d '90 days ago' +%s)
while read -r key colon date
do
  age=$(date -d "$date" +%s)
  if (($age < $cutoff))
  then
    printf "Warning! key %s is older than 90 days\n" "$key" >&2
  fi
done < input

関連情報