Я новичок в сценариях bash и пытаюсь написать сценарий, который удаляет файлы резервных копий на сервере старше x дней. На данный момент я установил номер 7, но это, вероятно, изменится. Сценарий в конечном итоге будет выполнен с помощью crontab. Он должен соответствовать следующим требованиям.
- Удалить файлы старше x количество дней
- Однако всегда должно быть не менее 3 файлов резервных копий. Поэтому, если резервных копий меньше 4, скрипт не должен их удалять.
Я попытался решить выше с кодом ниже
#!/bin/bash
unset all_backups_count
unset old_backups_count
unset increment_old_backups_count
all_backups_count="$(find -type f | wc -l)"
old_backups_count="$(find -mtime +7 -type f | wc -l)"
increment_old_backups_count=$((old_backups_count + 3))
if [ "$all_backups_count" -ge 3 ] && [ "$increment_old_backups_count" -le "$all_backups_count" ];then
echo "deleting ${old_backups_count} old backup files";
find -mtime +7 -type f -delete;
echo "success";
fi
Приведенный выше скрипт работает в определенной степени, однако в тех случаях, когда резервные копии старше x дней (в данном случае 7), он вообще не удаляет какие-либо резервные копии. Лучший сценарий должен быть;
- Если файлы резервных копий имеют размер более 3 и все старше 7 дней, самые старые файлы резервных копий следует удалять до тех пор, пока в них не останется только 3 файла резервных копий, которые должны быть самыми последними.
- Кроме того, я уверен, что мой сценарий требует много рефакторинга