Ви можете спробувати побачити, як працює дата, наступним чином:
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 $ (дата +% m) $ (дата +% y) | egrep -v" $ (дата +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (дата -d "+1 місяць тому" +% m) $ (дата +% y) | egrep -v "$ (дата +% y) | Su" | xargs | awk "{print $ NF} ') | до н.е.
Тож тепер ми знаходимо різницю між цими двома місяцями:
echo "$ (cal $ (дата +% m) $ (дата +% y) | egrep -v" $ (дата +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (дата -d "+1 місяць тому" +% m) $ (дата +% y) | egrep -v "$ (дата +% 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 місяць тому".