У меня есть новое требование для очистки файлов дампа MySQL старше 30 дней. Файлы используют соглашение об именах "all-mysql-YYYYMMDD-HHMM.dump". Файлы находятся в файловой системе, смонтированной в SAN, поэтому восстановление не представляет проблемы, но, к сожалению, дисковое пространство ограничено и быстро заполняется, что требует частого вмешательства человека.
Пример имен файлов
- все-MySQL-20130324-2330.dump
- все-MySQL-20130325-2330.dump
- все-MySQL-20130326-2330.dump
Моей первой мыслью было использовать «find» внутри пакетного скрипта с параметром -mtime +30, однако время модификации не может быть гарантировано, и некоторые старые архивы могут уклоняться от даты очистки :)
Я создал следующий скрипт BASH, но я надеялся, что есть более чистый способ выполнить эту операцию.
#!/bin/bash
STARTING_DIR=$(pwd)
FILE_PREFIX=all-mysql-
BACKUP_DIR=/opt/backup/mysql/dumps
ARCHIVE_WINDOW_DAYS=30
cd $BACKUP_DIR
# Create YYYYMMDD datestamp for Today - $ARCHIVE_WINDOW_DAYS
ARCHIVE_WINDOW_IN_SECS=$(echo "$(date +%s) - (${ARCHIVE_WINDOW_DAYS} * 86400)" | bc)
PURGE_BEFORE_DATE=$(date -d @${ARCHIVE_WINDOW_IN_SECS} +%Y%m%d)
for backup_file in $FILE_PREFIX*
do
# Trim prefix, time portion of date stamp, and file extension
# from $backup_file to allow numeric comparison against YYYYMMDD
backup_trim_tmp=${backup_file#${FILE_PREFIX}}
backup_trimmed=${backup_trim_tmp%-****.dump}
if [ ${PURGE_BEFORE_DATE} -gt ${backup_trimmed} ]
then
rm $backup_file
fi
done
cd $STARTING_DIR
logrotate
более чистое решение?Ответы:
Еще один способ удалить все, кроме последних 30 файлов:
Или вот более короткая версия скрипта в оригинальном посте:
источник
Если вы хотите удалить все, кроме последних 30 файлов:
Это будет соответствовать вашему требованию при условии, что существует одна резервная копия в день, и схема именования остается неизменной (т. Е. Алфавитный порядок = хронологический порядок, без пробелов в именах файлов).
Вы специально запросили однострочник в одном из ваших комментариев. Лично мне нравится больше писать. Этот лайнер немного опасен (если sed не работает, все удаляется).
источник