我不确定这是否会在当天获得过去的日期,或者是否只需要 30 或 31 天。
例如
如果当前日期是March 28th,则必须是 1 个月前February 28th,但是当它是 时会发生什么March 30th?
设想
我想每天备份一些文件,脚本将在当前日期内保存这些文件,$(date +%Y%m%d)格式20150603_bckp.tar.gz为我的条件:
past_month = $(date -d "-1 month" +%Y%m%d)
day = $(date +%d)
if [ "$day" != 01 ] && [ "$day" != 15 ]
then
rm /path/of/files/${past_month}_bckp.tar.gz
echo "Depuration done"
else
echo "Keep file"
fi
Run Code Online (Sandbox Code Playgroud)
但是我想知道,当日期是 30 日、31 日甚至过去的二月示例时会发生什么?它会保留那些文件吗?或删除第一天的文件?
当它是 31 日时,净化将执行,所以如果过去一个月只有 30 天,这将删除第 1 天的文件?
我希望我有所暗示。
ric*_*ici 30
- 1 month将从月份数中减去一,然后如果结果日期无效(February 30例如),则调整它以使其有效。那么December 31 - 1 month是December 1,没有一天11月和March 31 - 1 month是March 3(除非闰年执行)。
这是Gnu信息页面的引用date(这是date实现此语法的版本),其中包含一个使算术更健壮的好建议:
单位中的模糊可能会导致相关项目出现问题。例如,
2003-07-31 -1 month可能计算为 2003-07-01,因为 2003-06-31 是无效日期。为了更可靠地确定上个月,您可以要求在当月 15 号之前的月份。例如:
$ date -R
Thu, 31 Jul 2003 13:02:39 -0700
$ date --date='-1 month' +'Last month was %B?'
Last month was July?
$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
Last month was June!
Run Code Online (Sandbox Code Playgroud)
另一个警告,也引用自信息页面:
此外,在处理时钟变化(例如夏令时跳跃)的日期时要小心。在少数情况下,它们会从时钟中增加或减少多达 24 小时,因此 在开始日历计算之前通过将
TZ环境变量设置为 来采用世界时通常是明智的UTC0。
| 归档时间: |
|
| 查看次数: |
61062 次 |
| 最近记录: |