Bon, c'est pas nouveau, mais plus il y en a de differents... j'ai ecrit un petit script qui permet de sauvegarder des fichiers/dossiers, eventuellement de les encrypter et de les copier vers un ftp. j'ai aussi ecrit un petit script PHP qui permet de voir la liste des sauvegarde, d'avoir qq infos dessus, et notammenet de verifier que l'upload s'est bien passé grace a un checksum md5. en gros :
dans le repertoire ou seront stockées les sauvegardes, il doit y avoir 2 fichiers "inclure" et "exclure" qui contiennent respecyivement la listes des données a sauvegarder et les fichiers a exclure.
lancé seul, le script effectue une sauvegarde complete qui servira de base pour les sauvegardes incrementales suivantes
lancé avec l'option -i le script effectue une sauvegarde incrementale.
dans les 2 cas, le script genere une archive tar/gzip avec un nom explicite, et un fichier .md5 correspondant.
le script upload l'archive et le fichier md5 sur le serveur
le script php doit etre placé dans le meme repertoire que les archives sur le serveur. en se rendant sur la page qui correspond, on voit si l'upload a fonctionné.
lorsque on retelecharge les archives, les fichiers md5 permettent aussi de verifier que le telechargement s'est bien passé.
voila, en esperant que ca ser utile a d'autre:
Le script :
#!/bin/bash
#repertoire ou seront placée les sauvegardes
MYREP=~/script/backup/
EXC=${MYREP}exclure
INC=${MYREP}inclure
STATE=${MYREP}etat
COMPRESSION=9
DATE=$(date +%y%m%d-%H.%M.%S)
# Si le script est appelé avec l'option "-i", alors on fait une sauvegarde incrementale
if [ $1 = "-i" ] ; then
FILENAME=backup_incr_${DATE}.tgz
tar cP --atime-preserve -g $STATE --same-owner --totals -T $INC -X $EXC | gzip -$COMPRESSION > ${MYREP}${FILENAME}
# Sinon, on fait une sauvegarde totale
else
FILENAME=backup_full_${DATE}.tgz
rm -f $STATE
tar cP -g $STATE --atime-preserve --same-owner --totals -T $INC -X $EXC | gzip -$COMPRESSION > ${MYREP}${FILENAME}
fi
#decommenter pour encryption
#ccencrypt -K MotDePasse -- ${FILENAME}
#FILENAME=${FILENAME}.cpt
#generation du fichier contenant le md5
md5sum ${MYREP}${FILENAME} > ${MYREP}${FILENAME}.md5
#envoi FTP
ftp -n ftpperso.free.fr << EOF
user logine pass
bin
cd save
lcd ${MYREP}
send ${FILENAME}
ascii
send ${FILENAME}.md5
bye
EOF
index.php
<?php
function taille($fichier)
{
$taille=filesize($fichier);
if ($taille >= 1073741824)
{$taille = round($taille / 1073741824 * 100) / 100 . " Go";}
elseif ($taille >= 1048576)
{$taille = round($taille / 1048576 * 100) / 100 . " Mo";}
elseif ($taille >= 1024)
{$taille = round($taille / 1024 * 100) / 100 . " Ko";}
else
{$taille = $taille . " o";}
if($taille==0) {$taille="-";}
return $taille;
}
echo("<center><table border=1 cellpadding=10><tr><td>date</td><td>heure</td><td>taille</td><td>type</td><td>Checksum</td></tr>");
if($dh=opendir("."))//on ouvre le repertoire dans lquel on est ('.' designe le repertoire courant)
{
while($file=readdir($dh)) //tant qu'il y a des fichiers : les repertoires sont considérés comme des fichiers
{
$ext = strtolower(substr(strrchr($file, "."), 1));
if($ext=="tgz" || $ext == "cpt")
{
echo("<tr>");
preg_match("/_([0-9]*)-/", $file, $match);
echo("<td>".$match[1]."</td>");
preg_match("/-([0-9]*\.[0-9]*\.[0-9]*)/", $file, $match);
echo("<td>".$match[1]."</td>");
echo("<td>".taille($file)."</td>");
preg_match("/_(.*)_/", $file, $match);
echo("<td>".$match[1]."</td>");
$f=fopen($file.".md5","r");
$t=fgets($f,33);
fclose($f);
if($t== md5_file($file))
{
echo("<td>OK</td>");
}else{
echo("<td><b>ERREUR</b></td>");
}
echo("</tr>");
}
}
}else{
echo("erreur");
}
echo("</table></center>");
?>
exemple de fichier inclure
~/latex/
~/truc
exemple de fichier exclure
*.aux
*.tmp
*~
voila :-)