如何获取上个月的日期?在3月30日,使用“date +%Y%m -d'1 month ago'”无法正常工作。

4
我写了一个脚本来删除旧文件。脚本的一部分如下所示:
lastmonth=`date +%Y%m -d '1 month ago'`
inputdir0=/var/this/directory/${lastmonth}*

if [ `date +%d` -gt 9 ];
then        
    rm -Rf $inputdir0
fi

有一些目录以日期+%Y%m%d格式命名。 现在是3月29/30/31日,脚本删除了这个月的所有文件。 今天我学到这是因为没有2月29/30/31。

我该如何解决这个问题?

2个回答

7

减去当前月份的天数,即可得到上个月的最后一天。例如:

date +%Y-%m-%d -d "`date +%d` day ago"

结果在

2017-02-28

由于您不关心日期,只需要月份,因此您将始终获得正确的月份:

lastmonth=$(date +%Y%m -d "$(date +%d) day ago")

2
如果您希望将日期按照您提供的天数进行偏移:
Number=222
current_date=$(date +%Y%m%d)
past_date=$(date -d "$current_date - $Number days" +%Y%m%d)
echo "$current_date\t$past_date"

如果您希望获得1个月的服务:

date -d "$current_date -1 month"

同样地,对于一年:
date -d "$current_date -1 year"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接