如何获得最后一个月?date +%Y%m -d '1 个月前' 在 3 月 30 日不起作用

mbe*_*ann 2 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
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能解决这个问题?

fan*_*nts 5

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

date +%Y-%m-%d -d "`date +%d` day ago"
Run Code Online (Sandbox Code Playgroud)

结果是

2017-02-28
Run Code Online (Sandbox Code Playgroud)

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

lastmonth=$(date +%Y%m -d "$(date +%d) day ago")
Run Code Online (Sandbox Code Playgroud)