如何在不使用 Stat 的情况下比较两个日期?

如何在不使用 Stat 的情况下比较两个日期?

我正在尝试将文件的上次修改日期与今天的日期进行比较。如果修改日期在今天的日期之前,那么我的脚本将做一件事,如果日期与今天的日期匹配,我需要它做另一件事。现在我的代码如下所示:

date2= ls -l file | awk '{print $6 $7}'
date1= date +%b%d

if (( $(printf "%(%s)T" "$date1") > $(printf "%(%s)T" "$date2") ))
then
  echo "date1 is after date2"
else
  echo "date1 is not after date2"
fi

该代码不起作用。有没有人有什么建议?

答案1

如果您find安装了 GNU,则以下行将返回文件名(如果上次修改时间早于今天)

find yourfile -prune -daystart -mtime +0 -print

答案2

您可以直接bash/zsh/ksh与测试运算符比较文件时间戳-nt更新于)。您还可以用来touch设置文件的时间,例如0:00今天的午夜。简单地说:

touch -d '0:00' /tmp/midnight
if [ file -nt /tmp/midnight ] ...

答案3

如果在 GNU 系统上,您可以使用以下命令:

#!/bin/bash
last_mod="$(date -r "$1" '+%Y%m%d')"
current="$(date '+%Y%m%d')"

if [ "$last_mod" -eq "$current" ]; then
    ## Do something
elif [ "$last_mod" -gt "$current" ]; then
    ## Do something
else
    ## Do something
fi

将文件名作为第一个参数插入到脚本中。

  • last_mod将包含文件的最后修改日期

  • current将包含今天的日期

答案4

if [[ $(date -d$(date +%D) +%s) -gt  $(date +%s -r file.txt) ]]; then
      echo "Not Today" 
      else echo "Today"
fi

这将比较自今天 00:00 纪元以来经过的时间和自 file.txt 纪元以来的修改日期。

相关内容