У меня есть ситуация, когда файлы журналов сохраняются в / ГОД / МЕСЯЦ / структура папок, например /2018/03/fakelog.tmp.gz
Я хотел бы, чтобы cronjob запускался ежемесячно для удаления файлов старше определенного количества лет, и вместо использования say find, я полагаю, можно было бы использовать эта структура, чтобы сделать вещи более эффективными (с find -mtime это займет много-много минут).
Я уверен, что было бы легко получить текущую дату и уменьшить год, скажем, на 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
.