Salut à tous,
Le topo, j’ai un système live sur une clef usb et je veux synchroniser le home de ma clef avec un répertoire de mon poste fixe.
Pour cela j’ai commencé par identifier ma clef de façon unique avec Udev, au passage si quelqu’un sait pourquoi je ne vois plus ma clef en faisant un fdisk -l, je devrai '“normalement” voir /dev/lenomdemaclef.
Bref à chaque connexion de la clef une règle Udev appelle u script pour faire une synchro.
J’ai un peu pris pas mal de bout de script à droite, à gauche et presque tout marche sauf l’affichage graphique.
Du moins je veux juste une barre de progression et un pop up pour dire que la synchro est terminée.
Attention c’est peu être un peu le fouillis, fin si vous comprenez pas certaines choses dite moi
Le code:
[code]#! /bin/sh
######################################################################################
Script de gestion de connexion et sauvegarde du /home de la clef sur le poste fixe
######################################################################################
afficheTaille () {
taille=$(sed ‘/./! s/^.*$/&.00/’ <<< $1)
i=1
while [[ ${#taille} -ge 7 ]]; do
taille=$(bc <<< “scale=2;$taille/1024”)
((i+=1))
done
case $i in
1) taille+=" octets" ;;
2) taille+=" Ko" ;;
3) taille+=" Mo" ;;
4) taille+=" Go" ;;
esac
echo $taille
}
#-------------------------------------------------------------------------------------
Déclaration des variables
#-------------------------------------------------------------------------------------
Paramètres d’identification de la clef
DEVTYPE="usb"
ID_SERIAL_SHORT="A500000000026452"
KEY_SYNC=/dev/LiveUSB2
Répertoires sources et destination
SRC_DIR=/home/leseb/MOUNT/
DEST_DIR=/home/leseb/udevsync/
MONT_POINT=/home/leseb/MOUNT/
Fichiers de log horodatés
BKP_DATE=date +"%Y-%m-%d_%H-%M"
LOG_FILE=/tmp/Logs_Sync/sdBackup_${BKP_DATE}.log
BKP_LOG_FILE=$DEST_DIR/Logs_Sync/sdBackup_${BKP_DATE}.log
RSYNC_ERR=/tmp/rsync.err
#------------------------------------------------------------------------------------
Algo
#------------------------------------------------------------------------------------
Initialisation du fichier de log
echo “Backup du $BKP_DATE” >> $LOG_FILE
echo "Début à date +'%H:%M:%S'
" >> $LOG_FILE
if [ “$ACTION” = “add” ] ; then
mount $KEY_SYNC $MONT_POINT
echo “Clef “$ID_MODEL” montée (”$ACTION"), backup en cours" >> $LOG_FILE
echo "0" > nb
DEBUT=$(date +%s)
rsync -p -r $SRC_DIR "$DEST_DIR"
$SRC_DIR/ $DEST_DIR 2>>$RSYNC_ERR | sed '
/to-check=/! {
/^sending/ {d;q;}
/\/$/ {d;q;}
/^sent/ {s/^.*$/echo "&" \>\/tmp\/rapport\.txt/e;d;q;};
/^total/ {s/^.*$/echo "&" \>\>\/tmp\/rapport\.txt/e;d;q;};
/^.\{43\}/ {s/\(^.\{20\}\).*\(.\{20\}$\)/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "\1\[...\]\2" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
/^.\{43\}/! {s/^.*$/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "&" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
}
/to-check=/ {
s/.*=\(.*\)\/\(.*\))/echo "#`echo "scale=2;\(\2-\1\)\*100\/\2" | bc | cut -d\. -f1`% (\$\(\(\2 - \1\)\) fichiers sur \2\) > \$\(cat \/tmp\/svgrd_sed\.txt\)"\; echo "scale=2;\(\2-\1\)\*100\/\2" | bc/e
}
' | zenity --progress --width=580 --title="Home - synchronisation" --text="Initialisation de la sauvegarde..." --percentage=0 --auto-close &
while true; do
sleep 1
if [ -z "$(pidof zenity)" ]; then
pkill rsync
break
fi
done
FIN=$(date +%s)
TEMPS=$(($FIN-$DEBUT))
TP_HEU=$(sed 's/^.$/0&/' <<< $(($TEMPS/3600)))
TP_TMP=$(($TEMPS%3600))
TP_MIN=$(sed 's/^.$/0&/' <<< $(($TP_TMP/60)))
TP_SEC=$(sed 's/^.$/0&/' <<< $(($TP_TMP%60)))
TP=$(echo "$TP_HEU:$TP_MIN:$TP_SEC")
ERR=$(cat $RSYNC_ERR)
if [[ ${#ERR} -ne 0 ]]; then
zenity --error --title="svgrd" --text="Problème lors de la sauvegarde du répertoire <b>$SRC</b>.\n\n<b><span color='red'>$ERR</span></b>."
rm $RSYNC_ERR
else
NB_FICH=$(cat nb)
ENVOI=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f2))
RECU=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f6))
VITESS=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f9))
zenity --info --title="svgrd" --text="Sauvegarde du répertoire\n<b>$SRC</b>\nefféctuée avec succès.\n$NB_FICH fichiers synchronisés\n\nEnvoyé:\t$ENVOI\nReçu:\t$RECU\nTemps:\t$TP\nTransfert:\t$VITESS/sec"
rm nb
fi
# Copie du log sur le répertoire de synchro
cp -f $LOG_FILE $BKP_LOG_FILE
fi
if [ “$ACTION” = “remove” ] ; then
umount -f $KEY_SYNC >> $LOG_FILE
echo “Clef “$ID_MODEL” démontée (”$ACTION")" >> $LOG_FILE
fi
#------------------------------------------------------------------------------------
EOF
#------------------------------------------------------------------------------------[/code]
Merci à tous
Ps: ce script est basé sur celui-ci posté par Koderez chez vos grands amis =P forum.ubuntu-fr.org/viewtopic.php?id=82232&p=12