Ich habe ein Skript erstellt, um automatische Backups auf meinem CentOS 7-Server auszuführen.
Die Backups werden im Verzeichnis /home/backup gespeichert. Das Skript funktioniert, aber jetzt würde ich gerne eine Möglichkeit einbauen, die Dateien zu zählen, nachdem die Sicherung durchgeführt wurde, und wenn die Anzahl größer als 5 ist, die älteste Sicherung löschen.
Unten ist, was ich für mein Backup-Skript habe.
#!/bin/bash
#mysqldump variables
FILE=/home/backup/databasebk_!`date +"Y-%m-%d_%H:%M"`.sql
DATABASE=database
USER=root
PASS=my password
#backup command process
mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}
#zipping the backup file
gzip $FILE
#send message to the user with the results
echo "${FILE}.gz was created:"
ls -l ${FILE}.gz
# This is where I would like to count the number of files
# in the directory and if there are more than 5 I would like
# to delete the oldest file. Any help is greatly appreciated
Danke
-Mike
Akzeptierte Antwort:
Sie könnten sich set -- /home/backup/databasebk_*
ansehen und während $#
größer als fünf ist, löschen Sie eine Datei.
Der Code würde also ähnlich aussehen wie
set -- /home/backup/databasebk_*
while [ $# -gt 5 ]
do
echo "Removing old backup $1"
rm "$1"
shift
done
Dies funktioniert, weil die von Ihnen ausgewählten Dateinamen automatisch in der Reihenfolge „älteste zuerst“ sind.
Aus Konsistenzgründen würde ich eine Variable setzen (normalerweise nenne ich sie BASE
aber du kannst es nennen wie du willst)
Also
BASE=/home/backup/databasebk_
FILE=${BASE}!`date +"%Y-%m-%d_%H:%M"`.sql
....
set -- ${BASE}*
while [ $# -gt 5 ]
do
echo "Removing old backup $1"
rm "$1"
shift
done