Ich habe eine neue Anforderung zum Löschen von MySQL-Dump-Dateien, die älter als 30 Tage sind. Die Dateien verwenden die Namenskonvention "all-mysql-YYYYMMDD-HHMM.dump". Die Dateien befinden sich in einem SAN-gemounteten Dateisystem, sodass die Wiederherstellung kein Problem darstellt. Der Speicherplatz auf dem Laufwerk ist jedoch leider begrenzt und füllt sich schnell, sodass häufige menschliche Eingriffe erforderlich sind.
Beispiel für Dateinamen
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Mein erster Gedanke war, "find" in einem Batch-Skript mit -mtime +30 zu verwenden. Die Änderungszeiten können jedoch nicht garantiert werden und einige der älteren Archive könnten sich dem Löschdatum entziehen :)
Ich habe das folgende BASH-Skript erstellt, aber ich hatte gehofft, dass es eine sauberere Möglichkeit gibt, diesen Vorgang auszuführen.
#!/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
eine sauberere Lösung?Antworten:
Eine andere Möglichkeit, alle Dateien außer den letzten 30 zu löschen:
Oder hier ist eine kürzere Version des Skripts im Originalbeitrag:
quelle
Wenn Sie alle außer den letzten 30 Dateien löschen möchten:
Dies würde Ihre Anforderung erfüllen, vorausgesetzt, es gibt eine Sicherung pro Tag und das Benennungsschema bleibt unverändert (dh alphabetische Reihenfolge = chronologische Reihenfolge, keine Leerzeichen in Dateinamen).
Sie haben in einem Ihrer Kommentare ausdrücklich einen Einzeiler angefordert. Persönlich schreibe ich gerne mehr auf. Dieser eine Liner ist etwas gefährlich (wenn der Sed ausfällt, wird alles gelöscht).
quelle