#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
À 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 configurationEn 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.serviceCré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.targetAutoSync.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.mountAlerte.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"
doneAutoSync.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."
fiAlerte.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 mediaConfiguration 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