URL: https://linuxfr.org/forums/programmation-shell/posts/script-de-sauvegarde-totaleincr%C3%A9mentielle-via-tar Title: Script de sauvegarde totale/incrémentielle via tar Authors: un compte supprimé Date: 2007年10月29日T09:44:12+01:00 Tags: Score: 0 Bonjour, Je cherche à faire un script de sauvegarde qui gère l'incrémentiel. Mon script est pratiquement fait, me reste plus qu'un petit soucis, j'aimerrai pouvoir sauvegarder dans les incrémentielles seulement les fichiers qui ont changés depuis la dernière sauvegarde totale. J'ai une fonctione qui détermine le dernier jour ouvré (qui fonctionne très bien). Et suivant ce jour ouvré, on détermine si il y a eu une sauvegarde, si il y en as pas, la sauvegarde du jour actuel sera totale, si il y en as une, la sauvegarde sera incrémentielle. Pour celà, j'utilise la commande tar ainsi que quelques manipulation de dates. Ce que je nomme synchro, c'est la réplication à l'identique des données d'une autre machine sur le réseau. Je fais cette synchro via rsync (avec tunneling smb par point de montage ... mais c'est un tout autre script qui fonctionne parfaitement). Dans le dossier des synchro, j'ai des sous dossiers correspondant aux machines, et dans ces sous dossiers, j'ai de nouveau des dossiers correspondants aux partages smb. Voici mon code : #!/bin/sh date_current=`date "+%Y_%m_%d"` dir_synchro='/home/synchro' dir_backup='/home/backup' iteration=1 while [ `date --date "$iteration days ago" "+%w"` -eq 0 ] || [ `date --date "$iteration days ago" "+%w"` -eq 6 ] £spaces£ £/spaces£do £spaces£ £/spaces£iteration=$[$iteration+1] £spaces£ £/spaces£done date_last_humanoid=`date --date "$iteration days ago" "+%Y/%m/%d"` date_last=`date --date "$iteration days ago" "+%Y_%m_%d"` for cat in `ls $dir_synchro | tr -s ' ' '!'` £spaces£ £/spaces£do £spaces£ £/spaces£cat=`echo $cat | tr -s '!' ' '` £spaces£ £/spaces£for scat in `ls $dir_synchro/$cat | tr -s ' ' '!'` £spaces£ £/spaces£do £spaces£ £/spaces£scat=`echo $scat | tr -s '!' ' '` £spaces£ £/spaces£mkdir $dir_backup/$cat/$scat -p £spaces£ £/spaces£if [ ! -e $dir_backup/$cat/$scat/$date_last.tar.gz ] £spaces£ £/spaces£then £spaces£ £/spaces£echo "La sauvegarde précédente au $date_last n'existe pas ! La sauvegarde sera complète ..." £spaces£ £/spaces£tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current.tar.gz" --gzip "$dir_synchro/$cat/$scat" £spaces£ £/spaces£else £spaces£ £/spaces£echo "La sauvegarde précédente au $date_last existe déjà ! La sauvegarde sera incrémentielle ..." £spaces£ £/spaces£tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current.tar.gz" --gzip "$dir_synchro/$cat/$scat" --after-date $date_last_humanoid £spaces£ £/spaces£fi £spaces£ £/spaces£done £spaces£ £/spaces£done Ce qui ne fonctionne pas, c'est le " --after-date " car il se base sur la date de création du fichier et non pas de sa dernière sauvegarde ... j'ai la possibilité de modifier la date du fichier lors de la sauvegarde totale pour permettre la détection incrémentielles futurs ... mais ce n'est pas du tout jolis avec les synchro car la date est importante (surtout pour réduire la charge réseau). Comment pourrai je faire pour tenir compte des modifications de fichiers depuis la dernière sauvegarde ? Merci d'avance.