CURTIME=$(date '+%s')
LOG=/home/apache_logs.txt
FILETIME1=$(stat $LOG -c %Y)
TIMEDIFF1=$(expr $CURTIME - $FILETIME1)
我在 Ubuntu 中创建了这个脚本,它在那里工作正常,但在 SunOS (Generic_150400-64 sun4v sparc sun4v) 上,它不起作用。
该脚本用于检查日志是否正在更新,并根据 TIMEDIFF1 中秒数的输出执行操作(如果是其他情况)。
If else 将执行类似的操作,如果日志在 15 分钟前更新,则执行此操作,如果 30 分钟前更新,则执行此操作...等等。
因此,以秒为单位的输出时间对于 if else 语句的高效运行非常重要。
所以我试图在几秒钟内确定文件的年龄(修改/更新多久前)。我需要几秒钟的时间。
答案1
作为 stat 的替代品,您可以使用以下 perl oneliner:
perl -e 'print((stat("/tmp/a"))[10])'
要解决当前日期问题,您可以使用命令touch
创建临时文件并从临时文件中读取修改时间戳,如下所示:
touch /tmp/currtime
CURRTIME=$(perl -e 'print((stat("/tmp/currtime"))[10])')
FILETIME=$(perl -e 'print((stat("/path/to/log"))[10])')
DIFFTIME=$(($CURRTIME - $FILETIME))
echo "Time difference is $DIFFTIME seconds"
#cleanup
rm /tmp/currtime
有关 perl stat() 命令的参考可以在以下位置找到:https://perldoc.perl.org/functions/stat.html
答案2
如果您的 SunOS 系统上的版本date
不支持该 +%s
参数,则使用 来awk
修复那虽然并非不可能,但不切实际。
有效吗?如果没有,那你就运气不好了。如果是这样,您可以使用它来获取当前时间:stat filename -c %Y
tmpfile="/tmp/apache_test$$"
if [ -e "$tmpfile" ]
then
printf "%s exists; that’s odd.\n" "$tmpfile"
exit
fi
if ! { touch "$tmpfile" && CURTIME=$(stat "$tmpfile" -c %Y) && rm "$tmpfile";}
then
printf "Something went wrong.\n"
exit
fi
如果您的 bash 版本不支持,请改用 。[ -e filename ]
-f
PS您应该引用所有变量:
FILETIME1=$(stat "$LOG" -c %Y)
TIMEDIFF1=$(expr "$CURTIME" – "$FILETIME1")