У меня есть ситуация, когда файлы журнала сохраняются в структуре папок / ГОД / МЕСЯЦ /, например. /2018/03/fakelog.tmp.gz
Я бы хотел, чтобы cronjob запускался ежемесячно для удаления файлов старше определенного количества лет, и вместо использования say find, я полагаю, можно было бы использовать эту структуру, чтобы сделать вещи более эффективными (с помощью find -mtime it для запуска потребуется много-много минут).
Я уверен, что было бы легко получить текущую дату и уменьшить год, скажем, на 2, а затем удалить все / 2016/03 /, но тогда мы пропустим что-нибудь в / 2014 / или / 2016/01, что может быть беспокойство, если сценарий добавлен в другую систему или по какой-либо причине не запускается в определенный месяц.
Можно ли, например, найти какие-либо папки «менее» 2016 или любые папки «менее» / 2016/03? Или это можно решить другим способом, который не требует повторения каждой комбинации.
Спасибо за любую помощь
Я думаю, что это можно сделать с помощью простого скрипта вроде следующего:
#!/bin/bash
start_year=2010
year=`date +%Y -d '-2 year'`
mon=`date +%m -d '-2 year'`
prev_year=`expr $year - 1`
if [ $start_year -gt $year ]; then
echo "Nothing to do"
exit 0
fi
for i in `seq $start_year $prev_year`; do
echo "Removing year [$i]"
done
for i in `seq 1 $mon`; do
m=$(printf '%02d' $i)
echo "Removing month [$year/$m]"
done
Вам необходимо установить начальный год как «2010», как показано выше. Здесь скрипт просто покажет, какие папки нужно удалить. Так безопаснее убедиться и подтвердить удаление того, что действительно нужно. Когда вы удовлетворены, вы можете просто добавить rm -rf dir_name
.