J'ai une nouvelle exigence pour purger les fichiers de vidage MySQL datant de plus de 30 jours. Les fichiers utilisent une convention de dénomination "all-mysql-YYYYMMDD-HHMM.dump". Les fichiers sont situés sur un système de fichiers monté sur SAN, donc la restauration n'est pas un problème, mais l'espace disque est malheureusement limité et se remplit rapidement, ce qui nécessite une intervention humaine fréquente.
Exemple de noms de fichiers
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Ma première pensée a été d'utiliser "find" dans un script batch avec -mtime +30, cependant, les temps de modification ne peuvent pas être garantis et certaines des anciennes archives pourraient échapper à la date de purge :)
J'ai créé le script BASH suivant, mais j'espérais qu'il y avait un moyen plus propre d'effectuer cette opération.
#!/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
une solution plus propre?Réponses:
Une autre façon de supprimer tout sauf les 30 derniers fichiers:
Ou voici une version plus courte du script dans le post original:
la source
Si vous souhaitez supprimer tout sauf les 30 derniers fichiers:
Cela répondrait à vos besoins à condition qu'il y ait une sauvegarde par jour et que le schéma de dénomination reste tel qu'il est (par exemple, ordre alphabétique = ordre chronologique, pas d'espace dans les noms de fichiers).
Vous avez spécifiquement demandé un one-liner dans l'un de vos commentaires. Personnellement, j'aime mieux écrire les choses. Cette doublure est un peu dangereuse (si le sed échoue, tout est supprimé).
la source