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

У меня есть ситуация, когда файлы журналов сохраняются в / ГОД / МЕСЯЦ / структура папок, например /2018/03/fakelog.tmp.gz

Я хотел бы, чтобы cronjob запускался ежемесячно для удаления файлов старше определенного количества лет, и вместо использования say find, я полагаю, можно было бы использовать эта структура, чтобы сделать вещи более эффективными (с find -mtime это займет много-много минут).

Я уверен, что было бы легко получить текущую дату и уменьшить год, скажем, на 2, а затем удалить все / 2016/03 /, но тогда мы ничего не пропустим в / 2014 / или / 2016/01 что может вызвать беспокойство, если сценарий добавлен в другую систему или по какой-либо причине не запускается в определенный месяц.

Можно ли, например, найти какие-либо папки «менее» 2016 г. или любые папки «менее» / 2016/03? Или это можно решить другим способом, который не требует повторения каждой комбинации.

Спасибо за любую помощь

0
задан 7 March 2018 в 12:32
1 ответ

Я думаю, что это можно сделать с помощью простого скрипта, подобного следующему:

#!/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 .

2
ответ дан 4 December 2019 в 13:27

Теги

Похожие вопросы