floss:bash_scripts

Ceci est une ancienne révision du document !


Scripts Bash utiles

  • Question via ChatGPT : “Je souhaite disposer d'un script bash de backup pour sauvegarder une copie complète compressée d'un répertoire sous Ubuntu dans un répertoire dédié aux backups. Le script doit également effacer les backups antérieurs dès qu'ils sont plus vieux que 10 jours. Par contre, le backup de chaque premier jour du mois doit être déplacé vers un répertoire d'un autre nom.”
  • Réponse :

Voici un exemple de script bash qui répond à vos exigences pour la sauvegarde et la suppression des backups antérieurs :

backup.sh
#!/bin/bash
 
# Répertoire source à sauvegarder
source_directory="/chemin/vers/le/repertoire/source"
 
# Répertoire de destination pour les backups
backup_directory="/chemin/vers/le/repertoire/de/backups"
 
# Répertoire de destination pour les backups mensuels
monthly_directory="/chemin/vers/le/repertoire/de/backups/mensuels"
 
# Supprimer les backups antérieurs à 10 jours
find "$backup_directory" -type f -mtime +10 -exec rm {} \;
 
# Créer un répertoire pour la sauvegarde actuelle (nom basé sur la date et l'heure)
backup_folder="$(date +%Y%m%d%H%M%S)"
mkdir "$backup_directory/$backup_folder"
 
# Copier les fichiers du répertoire source vers la sauvegarde actuelle
cp -R "$source_directory" "$backup_directory/$backup_folder"
 
# Compresser la sauvegarde
tar -czf "$backup_directory/$backup_folder.tar.gz" "$backup_directory/$backup_folder"
 
# Supprimer le répertoire non compressé
rm -rf "$backup_directory/$backup_folder"
 
# Déplacer la sauvegarde mensuelle du premier jour du mois vers le répertoire mensuel
if [ "$(date +%d)" = "01" ]; then
    monthly_folder="$(date +%Y%m)"
    mkdir -p "$monthly_directory/$monthly_folder"
    mv "$backup_directory/$backup_folder.tar.gz" "$monthly_directory/$monthly_folder"
fi

Assurez-vous de remplacer les chemins d'accès réels pour source_directory, backup_directory et monthly_directory par les chemins appropriés sur votre système. Vous pouvez également ajuster les délais de suppression ou les noms de répertoires selon vos besoins.

Enregistrez ce script dans un fichier, par exemple backup.sh, puis rendez-le exécutable en utilisant la commande suivante :

chmod +x backup.sh

Vous pouvez ensuite exécuter le script en utilisant la commande suivante :

./backup.sh

Le script va créer un nouveau répertoire de sauvegarde basé sur la date et l'heure actuelles, copier les fichiers du répertoire source vers ce répertoire, compresser le répertoire de sauvegarde en un fichier tar.gz, puis supprimer le répertoire non compressé. Si la date actuelle correspond au premier jour du mois, le fichier de sauvegarde sera déplacé vers le répertoire mensuel spécifié.

N'oubliez pas d'adapter le script en fonction de vos besoins spécifiques et de tester attentivement avant de l'utiliser en production.

  • Question complémentaire : “Je souhaite placer aussi le backup effectué chaque 15 du mois. Je suppose qu'il suffit de rajouter une combinaison logique “ou” avec le test [ “$(date +%d)” = “15” ]. Pouvez-vous me donner la ligne complète correcte ?”

Oui, vous pouvez ajouter une condition supplémentaire pour le 15 du mois en utilisant l'opérateur logique “||” (ou). Voici la ligne complète modifiée :

if [ "$(date +%d)" = "01" ] || [ "$(date +%d)" = "15" ]; then

Avec cette modification, la sauvegarde sera déplacée vers le répertoire mensuel à la fois le premier jour et le quinzième jour de chaque mois.

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • floss/bash_scripts.1684931372.txt.gz
  • Dernière modification : 2023/05/24 14:29
  • de villersd