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

Как использовать функции даты для пакетной обработки Linux?

Во-первых, я не был уверен, принадлежит ли он 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 {} \;