如何获得上个月?日期+%Y%m -d' 1个月前' 3月30日没有工作

时间:2017-03-30 09:15:13

标签: linux bash date

我写了一个删除旧文件的脚本。部分脚本如下:

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 个答案:

答案 0 :(得分:4)

减去当月的天数,您将获得上个月的最后一天。例如:

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

结果

2017-02-28

由于您不关心这一天而只想要月份,因此您将始终获得正确的月份:

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

答案 1 :(得分:0)

如果您希望将日期改为您提供的天数:

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"