Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/01/2026, à 16:27

Gras_du_Bide

[Script] Sauvegarde auto à l'insertion d'un périph' USB avec rappel

Bonjour à tous,

Suite à ma demande ici, plusieurs personnes du forum (geole, Ilari1, krodelabestiole, Watael, MicP, iznobe, metalux) m'ont aidé à rendre possible mon projet, un grand merci à eux !
J'espère que ce projet pourra vous servir comme il sert à présent sur tous les ordinateurs chez moi. N'hésitez pas à faire des retours ou des améliorations.

Il existe beaucoup de solution de sauvegarde, mais j'en voulais une le plus simple possible (pas de chiffrement, pas de compression, tout reste parfaitement lisible) : tout auto lors de l'insertion de la bonne clé (ou du bon disque USB). D'où le nom : AutoSync

Comportements des 2 scripts (AutoSync.sh et Alerte.sh) et 2 services(AutoSync.service et Alerte.service) a écrit :

À l'insertion d'un périphérique USB (clé ou disque) identifié par son nom :
- demande si une synchronisation doit être faite oui/non
- si non : arrêt du script
- si oui : synchronisation du dossier choisi lors de la configuration

En l'absence de synchronisation tous les X temps :
- rappel de sauvegarde tous les Y temps

Places par défaut des 4 fichiers et des fichiers logs générés :

$HOME/
├── AutoSync/
│   ├── AutoSync.sh
│   ├── Alerte.sh
│   └── log/
│       ├── .last_usb_backup
│       └── backup-logs/
│
└── .config/
    └── systemd/
        └── user/
            ├── AutoSync.service
            └── Alerte.service

Créez les 4 fichiers nécessaires avec votre éditeur de texte préféré.
Alerte.service

[Unit] 
Description=Alerte en absence d'AutoSync récente.
DefaultDependencies=no
[Service]
Type=simple
ExecStartPre=echo Vérifier qu'AutoSync s'est lancé récemment
ExecStart=/home/%u/AutoSync/Alerte.sh
StandardOutput=journal+console
[Install]
WantedBy=default.target

AutoSync.service

[Unit] 
Description=Synchronisation automatique lors de la détection du montage d'une partition particulière identifiée par son étiquette
After=graphical-session.target
DefaultDependencies=no
[Service]
Type=simple
ExecStartPre=echo Lancement de la synchronisation
ExecStart=/home/%u/AutoSync/AutoSync.sh
ExecStartPost=echo Synchronisation terminée.
StandardOutput=journal+console
[Install]
# Le service sera déclenché quand une partition particulière est montée.
# Remplacez 'media-toto-sauvegardes.mount' par le nom exact de votre partition.
# Lancez :
# systemctl list-units | grep mount | grep media
# pour connaître le nom exact
WantedBy=media-toto-sauvegardes.mount

Alerte.sh

#!/bin/bash
# Environnement graphique (systemd user)
export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus

Stamp="$HOME/AutoSync/log/.last_usb_backup"
Borne=7 ### Nombre de jours tolérés sans sauvegarde.
Freq=1  ### Intervalle en heures entre deux rappels (ex: 0.5 = 30 min)

#pause initiale
sleep "$Freq"h

while true; do
    FIND=$(find "$Stamp" -ctime -$Borne ) 
    if [ ! -n "$FIND" ]; then
       DISPLAY=:0 zenity --error --title="AutoSync" --text "Aucune synchronisation trouvée depuis $Borne jours.\nVeuillez brancher la clé ou le disque reconnu par AutoSync."
   fi  
# Pause avant le prochain contrôle
sleep "${Freq}h"

done

AutoSync.sh

#!/usr/bin/env bash
# Environnement graphique (systemd user)
export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus

# Personnaliser ici le dossier à synchroniser, par défaut Documents vers Documents-nomutilisateur
Source="$HOME/Documents/"
Mountpoint="/media/toto/sauvegardes"
Target="/$Mountpoint/Documents-$(hostname)/"
Stamp="$HOME/AutoSync/log/.last_usb_backup"
Logdir="$HOME/AutoSync/log/backup-logs"
Log="$Logdir/backup-$(date +%F).log"

# Vérifie que le disque est bien monté.
# Adaptez les lignes suivantes selon vos préférences
if [ ! -d "$Mountpoint" ]; then
    notify-send "AutoSync" "Disque de sauvegarde non monté"
    exit 0
fi

# Demande de confirmation utilisateur
if ! zenity --question \
    --title="AutoSync" \
    --text="Détection d'un branchement par AutoSync.\n\nVoulez-vous lancer la synchronisation ?"; then
    notify-send "AutoSync" "Synchronisation annulée par l’utilisateur"
    exit 0
fi

# Préparation
mkdir -p "$Target"
mkdir -p "$Logdir"

# Synchronisation
notify-send "AutoSync" "Synchronisation automatique en cours…"
rsync -av --copy-links --delete "$Source" "$Target" > "$Log" 2>"$Log"-err

# Résultat
if [ $? -eq 0 ]; then
    date > "$Stamp"
    notify-send "AutoSync" "Synchronisation terminée avec succès ✅"
else
    DISPLAY=:0 zenity --error --text "Erreur pendant la synchronisation USB ❌. Veuillez consulter le fichier "$Log"-err pour plus de détails."
fi
Lisez-moi.txt a écrit :

Alerte.sh et AutoSync.sh à mettre dans un dossier AutoSync du home de l'utilisateur.
AutoSync.service et Alerte.service à mettre dans ./config/systemd/user/

Pour récupérer le nom de la partition à utiliser de la clé ou du disque:

systemctl list-units | grep mount | grep media

Configuration des variables
Adapter AutoSync.service pour renseigner le bon nom de la partition à utiliser (par défaut, utilisateur=toto et clé=sauvegardes)
Adapter Alerte.sh pour choisir le délai avant le rappel de sauvegarde et sa fréquence.
Adapter AutoSync.sh pour votre point de montage, par défaut: Mountpoint="/media/toto/sauvegarde" et les dossiers source et destination.

Pour finir, taper ces lignes de commandes quand les fichiers sont à leur places :

sudo apt install zenity
chmod +x $HOME/AutoSync/Alerte.sh
chmod +x $HOME/AutoSync/AutoSync.sh
systemctl --user daemon-reload
systemctl --user enable --now Alerte.service
systemctl --user enable --now AutoSync.service

Dernière modification par Gras_du_Bide (Le 08/01/2026, à 17:22)

Hors ligne