#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