我不确定这是否是当前日期的过去日期,或者仅需要30或31天。
例如
如果当前日期March 28th
必须是1个月前February 28th
,但是当它是什么时候会发生什么呢March 30th
?
设想
我想每天备份一些文件,该脚本将使用$(date +%Y%m%d)
格式将当前文件保存在当前日期内,例如20150603_bckp.tar.gz
,然后在下个月到来时,删除1个月前除1号和15号文件之外的所有那些文件,因此这是我的状况:
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
但是我想知道,当日期是30日,31日甚至是2月的例子时,会发生什么?会保留那些文件吗?或删除第一天的文件?
到31日时将执行净化,因此,如果过去一个月只有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-06-31是无效的日期,因此可能评估为2003-07-01。为了更可靠地确定前一个月,您可以要求当月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!
信息页面也引用了另一条警告:
另外,在围绕时钟更改的日期(例如,夏时制飞跃)操作时要小心。在少数情况下,这些时间会增加或减少24小时,因此在开始进行日历计算之前,通过将
TZ
环境变量设置为,采用通用时间通常是明智的UTC0
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句