Назад | Перейти на главную страницу

Файлы журналов в структуре папок / ГОД / МЕСЯЦ, как правильно удалить старые журналы?

У меня есть ситуация, когда файлы журнала сохраняются в структуре папок / ГОД / МЕСЯЦ /, например. /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.