我想将分钟四舍五入到最接近的 15 分钟间隔,即 00、15、30、45。我目前正在执行以下操作:
echo $(date +'%Y/%m/%d/%H/')$((($(($(date +'%M') / 15))-0)*15))
Run Code Online (Sandbox Code Playgroud)
但在一小时开始的 1-14 分钟之间,我得到“/2021/11/03/21/0”而不是 00。
另外,我不确定这是否是最好的方法。还有其他选择吗?
请您尝试以下操作:
mod=$(( 10#$(date +%M) \% 15 ))
date -d "-${mod} minutes" +%Y/%m/%d/%H/%M
Run Code Online (Sandbox Code Playgroud)
mod保存分钟除以 15 后的余数。mod。[编辑]
的联机帮助页crontab说:
命令中的百分号 (%),除非用反斜杠 () 转义,否则将被更改为换行符,并且第一个 % 之后的所有数据都将作为标准输入发送到命令。
如果要在crontab内执行命令,请将命令修改为:
mod=$(( 10#$(date +\%M) \% 15 ))
date -d "-${mod} minutes" +\%Y/\%m/\%d/\%H/\%M
Run Code Online (Sandbox Code Playgroud)
[Edit2]
如果您想将代码嵌入到crontab文件中,请添加一行,如下所示:
0 12 * * * username bash -c 'mod=$(( 10#$(date +\%M) \% 15 )); DATEVAR=$(date -d "-${mod} minutes" +\%Y/\%m/\%d/\%H/\%M); write.sh "$DATEVAR"'
Run Code Online (Sandbox Code Playgroud)
/bin/sh. 然后您需要显式切换它来/bin/bash执行 bash 命令。% 15我很抱歉在我的上一篇文章中缺少(模运算)前面的反斜杠。