您可以尝试通过以下方式查看日期的工作方式:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
因此,我认为,基于上个月的当前日期(如果不是3月,则不是当前的当前日期),会从当前月份的上个月开始减少天数。
您可以尝试使用以下语法来删除文件,然后删除数天(在以下示例中为31天)。一线解决的问题(这是一种简单的方法)。
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
对于更详细的方法,您还可以执行以下操作:1.查找当前月份的天数:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
查找上个月的天数:
echo“ $(cal $(date +%m)$(date +%y)| egrep -v” $(date +%y)| Su“ | xargs | awk'{print $ NF}')-” $( cal $(date -d“ +1个月前” +%m)$(date +%y)| egrep -v“ $(date +%y)| Su” | xargs | awk'{print $ NF}') | 公元前
因此,现在我们发现这两个月之间的区别:
echo“ $(cal $(date +%m)$(date +%y)| egrep -v” $(date +%y)| Su“ | xargs | awk'{print $ NF}')-” $( cal $(date -d“ +1个月前” +%m)$(date +%y)| egrep -v“ $(date +%y)| Su” | xargs | awk'{print $ NF}') | 公元前
现在让我们为这3个步骤分配一些变量。步骤1变量名称:FCM步骤2变量名称:FLM步骤3变量名称:DCL
FCM=$(cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
FLM=$(al $(date -d "+1 month ago" +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
DCL=$(echo "$FCM-$FLM" | bc)
验证$ DCL是否等于0(零),然后根据$ FCM和$ FLM之间的差删除:
if [ $DCL -ne 0 ]; then
if [ $DCL -lt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
elif [ $DCL -gt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
fi
else
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$FLM -delete
fi
您还可以将变量添加到“ / path / to / folde / with / arhives /”。
结论:如果要删除早于一个月的文件(正好),并且使用“ date”命令和“ +1 month ago”,则需要调整确切的天数。