오늘 날짜를 파일의 마지막 수정 날짜와 비교하려고 합니다.
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 이후) 단위입니다.
%y
stat를 다음으로 변경 %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"