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 22/06/2008, à 15:33

thurston

[RESOLU] Script: Preselection Backup (MP3s...) => disque optique DVD

Bonjour,

J'ai pour habitude de sauvegarder ma musique sur des DVDs tous les ans. Le problème est de savoir ce qui a été modifié par rapport à l'année précédente. J'aurais voulu me créer une image des fichiers sauvegardés (une vingtaine de DVDs), sous la forme d'une liste tableur? ou texte, sans utiliser le système d'exploitation... Je veux dire, je lance un script, celui ci traverse toute ma musique, et m'indique, par rapport à la liste précédente ce qui a changé. Je peux alors copier uniquement les fichiers nouveaux ou modifiés (tags remis à jour..). L'idéal serait que le script me dise en plus le pourquoi de la présence du fichier dans la liste des fichiers à backuper: Fichier avec tags remis à jour, fichiers renommés seulement, nouveaux fichier...
A noter que je ne veux pas utiliser les tags du système d'exploitation, car lorsque je réinstalle, ou copie les fichiers lors de grands mouvement sur mon réseau local, tous les fichiers se retrouvent étant nouveaux lors de la copie par exemple. Utiliser alors le basique: trier par date de modification devient inutile...C'est mon cas actuellement...Et je vais donc être obligé de me cogner mes 13 000 MP3s* à bakcuper...

Ainsi les étapes seraient:
0. Lancement du script en indiquant quel repertoire parcourir
1. Pointer sur les fichiers des backups précédents pour pouvoir compare la liste actuelle aux additions des listes des backups précédents
2. Parcours du repertoire en question
3. Affichage de la liste des fichiers à backuper sous la forme
    nom du fichier - emplacement - Attribut
    avec, dans attribut: Modification, Renomé, Nouveau, Tags updaté...
4. Est il possible après coup de même prévoir des images DVD à directement appelé dans Brasero???

Tous vos commentaires sont les bienvenus sur les fonctions de bash que je devrais à votre avis utiliser. Est ce possible de faire quasiment tout avec rsync??? Je veux dire, il est peut être possible d'utiliser rsync simplement sans backuper mais simplement pour produire la liste adéquate? Mais comment fait on alors pour appeler un backup virtuel (les précédents fichiers de comparaison) pour comparaison et génération du nouveau??? Sinon, quel est la signature d'un fichier qui permet de décréter qu'il n'a pas évoluer, bien évidemment pas le nom, ni la taille...voir du coté de rsync encore?
D'avance merci
Thurston

* Tous issus de CD originaux. J'y tiens, et pense toujours qu'un amoureux de musique ne peut pas pirater un artiste qu'il apprécie, puisque acheter l'oeuvre, c'est laisser une chance à l'artiste d'en créer une suivante...Enfin, c'est mon avis, sans jugement sur les pratiques d'autrui.

Dernière modification par thurston (Le 06/07/2008, à 15:53)

Hors ligne

#2 Le 04/07/2008, à 21:14

thurston

Re : [RESOLU] Script: Preselection Backup (MP3s...) => disque optique DVD

Alors, voila le script qui répond à mes attentes.
Le but est donc de sauvegarder quelques millers de MP3 tous les ans sur DVDs. L'intérêt du script est qu'il:
1. permet d'effectuer le 1er backup (il suffit de créer pour cela un fichier (old crc file) vierge. Le script collecte alors tous les fichiers à sauvegarder, et les range en repertoires de 4.3Go pour le backup à faire avec Brasero par ex
2. créé une liste de valeurs crc pour chaque fichiers scannés et les place dans un fichier (new crc file)
3. permet de maintenir ses backups à jours, puisqu'en utilisant la liste de (crc file) du précédent backup, le script détermine les nouveaux fichiers ou simplement fichiers modifiés qu'il repositionne dans des repertoires de 4.3Go pour continuer le backup, en complétant donc la liste de DVD déjà effectuée.
4. Le petit + du script est qu'il recrée le répertoire contenant le fichier sauvegardé pour garder la cohérence de milliers de MP3 rangés selon le schéma suivant /album/titre. Ainsi
Orignal file: /media/MyMP3s/Sonic Youth - Rather/Confusion.mp3 sera backupé dans le répertoire indiqué dans les variables à renseigner /media/disk, sous un répertoire IMG001 (qui fera 4.3Go au max), en recréant le répertoire Sonic Youth - Rather qui correspond ici à l'album
>>>>>>>> /media/disk/IMG001/Sonic Youth - Rather/Confusion.mp3
5. Un fichier est également créé qui renseigne sur les fichiers de chaque IMG.
6. A noter qu'il faut commencer le script dans un repertoire avec uniquement le script et ses fichiers crc, car ces fichiers sont bizarrement intégrés au Backup, même si l'on demande de pointer sur un tout autre répertoire, ce que le script fait après s'être malheureusement occupé des fichier avec lui dans le repertoire. Un petit bug à corriger donc...

Voici donc le script.
Amitiés
Thurston

#!/bin/bash

#!/bin/bash

# This script does several functions, with regards to periodic backup on CD or DVD media of given files.
# This script is orientated to MP3s files (and their album art) organized in following way
# .../MP3s/ Album / file.mp3
# where Album can be a complex name, like Artist - Year - Album for example.
# and file can also be a complex name, like Artist - Year - Album - Title for example.

# Function 1
# - Determine and find new files exist in the scan directory, or if some old ones have been modified, using previous crc backup'd file
# - Create a file for stocking all crc value of each backuped file
# - Only take in account file - exceptions given below

# Function 2
# - All files found are placed in a TMP directory and organized in calibrated directory size for a future burning
# - All files are located in the exact same name directory than the existing one (then restore is easier).

# Funtion 3
# - Create a text file with all files being located in given Image to follow the content of each CD or DVD media 


# script use 3 arguments:
# 1. old crc file
# 2. new crc file which will be created
# 3. Location of the scanned directory

#!/bin/sh

#liste of exceptions
exceptions="AlbumArtSmall.jpg|Folder.jpg|Thumbs.db|.zip$|\.$"

# fixed variable
#DIR_STOCK="/media/disk/IMG00" 
DIR_IMG_SIZE_LIMIT=4617089843                                        # size = size (Mo) x 1024 x 1024
                                                                     # 4617089843 bytes = 1x DVD =4.3 Go
                                                                     # 681574400 bytes = 1x CD 650Mo **to be checked
                                                                     # 734003200 bytes = 1x CD 650Mo **to be checked

# initialization
FILE_SIZE=0
DIR_IMG_SIZE=0
i=1

# help
if [ $1 = "-h" ]; then
   clear
   echo "*******************************************************************************"
   echo ""
   echo "Usag: $0 <Scan Dir> <Dest. DIR> <old crc file> <new crc file> "
   echo "      $0 -h > Help"
   echo ""
   echo "Ex:   $0 Media/MyMP3s /media/disk 2007.txt 2008.txt"
   echo ""
   echo "       /media/MyMP3s  contains all files to be scanned"
   echo "       /media/disk    location for 4.3Go IMG00x folders where will be copied"
   echo "                      only crc changed or new file from previous backup, in"
   echo "                      a directory of same name* as file being copied"
   echo "       2007.txt       contains crc from previous backup used for comparaison"
   echo "       2008.txt       created by script > all scanned files crc"
   echo ""
   echo "Ex:   $0 /media/UbServer01.music/music/mp3s /media/disk 2007 2008"
   echo ""
   echo "      *this allows keeping MP3s files from same album copied under same album"
   echo "       folder if habing being sorted like this, on location being backed up"
   echo "       Orignal file: /media/MyMP3s/Sonic Youth - Rather/Confusion.mp3"
   echo "       >>>>>>>> /media/disk/IMG001/Sonic Youth - Rather/Confusion.mp3"
   echo "      ** For 1st script use, create a blank file for indicating never backed up"
   echo ""   
   echo "*******************************************************************************"
   exit
fi

# variable check
if [ $# -ne 4 ]; then
   echo "Usage: $0 <Scan Dir> <Dest. DIR> <old crc file> <new crc file> "
   echo "Usage: $0 -h > Help"
   exit 1
fi

# Use of script given variable
SCAN_DIR=$1
DIR_STOCK=$2/IMG00                                                 # location of all DVD / CD image to be burned
CRC_FILE_OLD=$3
CRC_FILE_NEW=$4



if [ -f $CRC_FILE_NEW ]; then
    echo "Error: $CRC_FILE_NEW already exists"
    exit 1
fi


find "$SCAN_DIR" -type f | egrep -v $exceptions | sort | while read FILE

do 
   FILE_NAME=`basename "$FILE"`                                      # extract file name only from the file item          
   FILE_SIZE=`(du -b --apparent-size "$FILE") | cut -f1`             # ` super important!!!! du works in bytes
   FILE_DIR=`dirname "$FILE"|awk -F "/" '{print $NF}'`               # extract file dir only 1step above file 
   FILE_CRC=`md5sum "$FILE" | cut -d' ' -f1`                         # FILE_CRC is only 128 bytes FILE_CRC, not with the file location + name
   FILE_LINE="$FILE_CRC $FILE_DIR/$FILE_NAME"                        # construction of a normalized FILE_LINE 

   echo "$FILE_LINE" >> $CRC_FILE_NEW                                # all files scanned are being crc stored in crc new file for next backup operation

   grep -q "^$FILE_LINE$" $CRC_FILE_OLD                              # equivalent to but a bit more efficient grep -q "$FILE_LINE" "$FILE_CRCFILE_OLD"

   if [ $? -eq 1 ]; then
       
      echo $FILE_NAME
      if [ $(( DIR_IMG_SIZE + FILE_SIZE )) -lt $DIR_IMG_SIZE_LIMIT ]; then    
         (( DIR_IMG_SIZE += FILE_SIZE))
         if [ ! -e "$DIR_STOCK$i/$FILE_DIR" ]; then                  # control of destination directory existence  
            mkdir -p "$DIR_STOCK"$i/"$FILE_DIR"                      # directory creation if directory doesn't exist, including 1st DVD1 at beginning
            cp "$FILE" "$DIR_STOCK$i"/"$FILE_DIR"                    # copy of current file with respect to the origianl file directory being copied
         else                                                        # if directory exists, simply fill it with one more file
            cp "$FILE" "$DIR_STOCK$i"/"$FILE_DIR"                    # copy of current file with respect to the origianl file directory being copied
         fi

      else 
         ((i+=1))                                                    # Change of iteration in DVD folder process
         DIR_IMG_SIZE=FILE_SIZE                                      # Size of new DVD+1 equal 0 + size of current file
         mkdir -p "$DIR_STOCK"$i/"$FILE_DIR"                         # creation of new DVD+1
         cp "$FILE" "$DIR_STOCK"$i/"$FILE_DIR"                       # copy of current file in the DVD+1, with respect to the orig. file dir. being copied
      fi

      if [ ! -e "$DIR_STOCK$i/Media00$i.txt" ]; then                 # control of destination directory existence  
         echo "creation IMG00$i in progress"
         touch "$DIR_STOCK"$i/Media00$i.txt                          # creation if /DVDx location (file size not taken in account in DIR_IMG_SIZE)
         echo "$FILE_DIR/$FILE_NAME" >> "$DIR_STOCK"$i/Media00$i.txt # 
      else
         echo "$FILE_DIR/$FILE_NAME" >> "$DIR_STOCK"$i/Media00$i.txt
      fi
   fi

done

# EOF

Dernière modification par thurston (Le 06/07/2008, à 17:56)

Hors ligne