Во-первых, я не был уверен, принадлежит ли он StackOverflow или здесь, но полагаю, что это было бы более применимо к администрированию сервера.
У нас есть .tar
файл резервной копии отправляется на внешний сервер резервного копирования каждый день в рамках нашей ежедневной обработки. Это относительно большие файлы, в среднем от 25 до 30 гигабайт. В результате мы можем хранить резервные копии не более 2 недель. Каждую пятницу (да, это пятница) каждый будет отправлять ssh на удаленный сервер OpenSuse 12.1 и вручную удалять файлы за неделю до этого и сохранять данные за текущую неделю. В файле есть согласованная схема именования, например, BACKUP<YYYYMMDD><Time stamp>
, например.
BACKUP20121022268498.tar
BACKUP20121022268498.log
BACKUP20121023268498.tar
BACKUP20121023268498.log
BACKUP20121024268498.tar
BACKUP20121024268498.log
BACKUP20121025268498.tar
BACKUP20121025268498.log
BACKUP20121026268498.tar
BACKUP20121026268498.log
BACKUP20121029268498.tar
BACKUP20121029268498.log
BACKUP20121030268498.tar
BACKUP20121030268498.log
BACKUP20121031268498.tar
BACKUP20121031268498.log
BACKUP20121101268498.tar
BACKUP20121101268498.log
и так далее.
В большинстве случаев я бы использовал команду rm *20121022*
в этом примере. Иногда, как в этом примере, мне даже удается обойтись без использования rm *201210[22-26]*
. Выполняя быстрый поиск в Google по мутной воде для меня. Я в основном пытаюсь настроить это так, чтобы стажер мог войти в систему и запустить скрипт из директории пользователя.
Есть простой способ сделать это? С чего мне начать? Я знаком с использованием функций даты на других языках, но мне кажется, что я не понимаю, с чего начать. Я не пишу много сценариев на Bash. Спасибо.
Предполагая, что временные метки файлов остаются неизменными, вы можете сделать это с помощью find.
find /path/to/backups -type f -maxdepth 1 -mtime +7 -delete
Это перечислит все файлы в каталоге без повторения, /path/to/backups
которые последний раз были изменены более 7 суток назад, и удалите их. Я бы рекомендовал бегать без -delete
сначала пока ты знать это сработает для вас.
Если вместо этого вы хотите работать в календарные дни, используйте -daystart
вариант. Я считаю это наиболее полезным, когда у меня есть что-то, что меняет файлы ежечасно, но я хочу основывать свой график хранения на календаре. Иногда различие между «днем» и «24-часовым периодом» действительно имеет значение, и использование -daystart
безусловно, упрощает объяснение графика удержания.
Вы можете удалить файлы старше 1 недели, используя следующую команду:
find /path -type f -name "BACKUP*" -mtime +7 -exec rm {} \;