我正在尝试将今天的日期与文件中的最后修改日期进行比较。
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
比较时间点(日期)的最佳方法是以秒为单位(自纪元以来)。
%y
将stat更改%Y
为 将会给出文件的修改日期(以秒为单位):
fileModifiedOn=$(stat $i -c %Y)
今天的日期可以使用格式为 %s 的 (GNU) 日期读取:
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"