Bash에서 날짜가 90일보다 오래된지 확인

Bash에서 날짜가 90일보다 오래된지 확인

사용자의 AWS 액세스 키가 90일보다 오래된 경우 보안 팀에 알려야 합니다. 나는 이것을 bash에서하고 있습니다.

지금까지 내 스크립트에서 출력된 키와 날짜는 다음과 같습니다.

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

Bash에서 날짜 형식을 사용하여 날짜가 90일보다 오래된지 확인하는 방법은 무엇입니까?

우분투 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

관련 정보