#!/bin/bash # Variables d'environnement BACKUP_DIR=${BACKUP_DIR:-"/backups"} DIRECTORIES=${DIRECTORIES:-"/source /source2"} RETENTION_DAYS=${RETENTION_DAYS:-14} # Array contenant les dossiers à sauvegarder (split des espaces) DIRECTORIES_ARRAY=($DIRECTORIES) # Message de démarrage echo "INFO: Starting backup script (v2.1) with the following variables" echo "INFO: - BACKUP_DIR: $BACKUP_DIR" echo "INFO: - DIRECTORIES: $DIRECTORIES" echo "INFO: - RETENTION_DAYS: $RETENTION_DAYS" # Fonction de sortie sur erreur exit_with_error() { echo "ERROR: $1" exit 1 } # Vérification du dossier de backup if [ ! -d "$BACKUP_DIR" ]; then exit_with_error "Backup directory '$BACKUP_DIR' does not exist!" fi # Boucle pour chaque dossier dans l'array for dir in "${DIRECTORIES_ARRAY[@]}"; do # Vérification si le dossier existe if [ ! -d "$dir" ]; then echo "WARNING: Source directory $dir does not exist. Skipping..." continue fi # Création du nom de fichier de backup avec la date base_name=$(basename "$dir") file_name="${BACKUP_DIR}/${base_name}_$(date +%Y-%m-%d_%H-%M-%S).tar.gz" echo "INFO: Backuping '$dir'..." # Création du backup zip output=$(tar -czf "$file_name" "$dir" 2>&1) # Affichage du message de succès ou d'erreur if [ $? -eq 0 ]; then echo "INFO: Backup of '$dir' successful: $file_name" else echo "ERROR: Failed to backup '$dir'" echo "ERROR: $output" continue fi done # Suppression des backups plus vieux que ${RETENTION_DAYS} jours echo "INFO: Checking for backups older than ${RETENTION_DAYS} days..." old_files=$(find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +${RETENTION_DAYS}) if [ -n "$old_files" ]; then echo "INFO: Deleting the following files: $old_files" # Suppression réelle echo "$old_files" | xargs rm -f else echo "INFO: No old backups to delete." fi