bash 스크립트에서 두 날짜를 비교하는 방법은 무엇입니까?

bash 스크립트에서 두 날짜를 비교하는 방법은 무엇입니까?

오늘 날짜를 파일의 마지막 수정 날짜와 비교하려고 합니다.

DATE=$(date +"%F")

LASTMOD=$(stat $i -c %y);
LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")

if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
    printf "%-19s | " "$DATE"
else
    printf "%-19s | " "NO RECENT MOD"
fi

현재 이것은 올바르게 비교되지 않습니다. LASTMOD_DATE가 실제로 날짜/시간이 아니기 때문이라고 생각하므로 "정수 표현식이 필요합니다"라는 오류가 발생합니다.

답변1

date +%s타임스탬프 형식 과 옵션을 사용할 수 있습니다 -r.

-r, --reference=FILE
         display the last modification time of FILE

좋다

if [ $(date +%s -r file) -ge $(date +%s) ]; then 
    # do something
fi

답변2

특정 시점(날짜)을 비교하는 가장 좋은 방법은 초(epoch 이후) 단위입니다.

%ystat를 다음으로 변경 %Y하면 파일 수정 날짜가 초 단위로 제공됩니다.

fileModifiedOn=$(stat $i -c %Y)

오늘 날짜는 (GNU) 날짜 형식 %s을(를) 사용하여 읽을 수 있습니다:

todayDate=$(date +'%s')

또는 Bash 5.0에서는 변수를 사용하십시오 EPOCHSECONDS.

todayDate=$EPOCHSECONDS

또는 이전 버전의 bash에서는 (내장) printf 형식을 사용하세요.

todayDate=$(printf '%(%s)T')

글쎄, 그것은 단순한 정수 비교의 문제일 뿐입니다:

if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
    result=$todayDate
else
    result="NO RECENT MOD"
fi

printf "%-19s | " "$result"

관련 정보