如何使用shell脚本检查文件的上次更改时间

der*_*dji 10 shell datetime copy file

我想找出是否在最后三分钟内更改了某些文件以确定是否cp成功,以及是否应该exit或继续该脚本.我怎样才能做到这一点?

谢谢

tsg*_*tsg 21

您可以使用stat以及当前日期获取文件的最后修改时间date.您可以使用两者的格式字符串在"自纪元以来的秒数"中获取它们:

current=`date +%s`
last_modified=`stat -c "%Y" $file`
Run Code Online (Sandbox Code Playgroud)

然后,很容易把它放在一个条件.例如:

if [ $(($current-$last_modified)) -gt 180 ]; then 
     echo "old"; 
else 
     echo "new"; 
fi
Run Code Online (Sandbox Code Playgroud)

  • `stat -c %Y` 的支持有多广泛?在 OS XI 上会使用 `stat -f %m`,但在某些 Linux 版本上,`stat -f` 会显示文件系统信息。大多数系统都支持`date -r "$file" +%s`,但是在 OS X 上不起作用的尴尬......有趣的东西:) (2认同)

Cas*_*bel 5

此 if 语句的语法取决于您的特定 shell,但 date 命令则不然。我使用bash;根据需要进行修改。

if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
    # was modified in last three minutes
else
    # was not modified in last three minutes
fi
Run Code Online (Sandbox Code Playgroud)

告诉+%sdate 输出 UNIX 时间(重要的是它是一个以秒为单位的整数)。您还可以使用 stat 来获取此信息 - 该命令stat -c %Y <file>是等效的。确保使用%Ynot %y,以便您获得以秒为单位的可用时间。