Bash скрипт для очистки старых файлов резервных копий
Я использую систему резервного копирования 12+31, то есть я сохраняю один файл из каждого месяца за прошедший год, плюс один файл за каждый день текущего месяца. Мне трудно понять, как создать сценарий bash, который будет выполнять следующую очистку:
- поиск в каталоге и его подкаталогах на удаленном SFTP-сервере
- в каждом каталоге ищите файлы: НЕ с этого месяца и НЕ С ПЕРВОГО предыдущего месяца
- с выбранными файлами, удалите их с удаленного SFTP-сервера
Например, если сейчас ноябрь, этот скрипт будет:
- искать все каталоги ниже указанной цели на моем удаленном SFTP-сервере
- игнорировать все файлы, которые были созданы в ноябре
- удалить все файлы с октября за исключением файлов с 1 октября
- удалить все файлы с сентября, КРОМЕ для файлов с 1 сентября
- так далее...
Он будет работать на сервере общего хостинга (Dreamhost), поэтому у меня не будет возможности устанавливать какие-либо пользовательские инструменты CLI.
Все мои файлы резервных копий содержат дату в имени файла, но я бы предпочел сверяться с датой создания файла, если это возможно.
Я видел много материала об удалении файлов старше [x], но я не совсем понимаю, как пропустить файлы, начиная с первого месяца.
1 ответ
Вот лучшее, что я могу придумать на данный момент:
find . -type f \ # files only
-mtime +31 \ # exclude files less than 31 days old
-printf '%Td %p\n' | # prepend filename with day of the month of last modification
grep -v '^01' |
sed 's/^[0-9][0-9] //'
Некоторые предостережения:
- зависит от GNU найти
- исключает файлы за последние 31 день, а не строго исключая текущий месяц
- смотрит на время последней модификации, а не на время создания. Большинство файловых систем не отслеживают время создания; если у вас есть, вам понадобится какой-то инструмент, кроме GNU find, чтобы получить к нему доступ
- вы не можете иметь переводы строк в ваших именах файлов