Вы можете попытаться увидеть, как работает дата, следующим образом:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Поэтому я думаю, что, исходя из текущего месяца в прошлом месяце (не текущего, если это март), уменьшается количество дней с последнего месяца по сравнению с текущим месяцем.
Вы можете использовать следующий синтаксис для удаления файлов старше нескольких дней (в примере ниже 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 Переменная NAme: 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 /».
Вывод: если вы хотите удалить файлы старше одного месяца (ровно), вам нужно отрегулировать точное количество дней, если вы используете команду «дата» и «+1 месяц назад».