#!/bin/sh

# remotebackup - Prend une liste de fichiers et de rpertoires, en
#   construit une archive compacte, puis l'expdie par courrier
#   lectronique sur un site d'archivage distant sr.
#   Ce programme est prvu pour traiter toutes les nuits les fichiers
#   critiques des utilisateurs, mais pas pour remplacer une politique de
#   sauvegarde plus rigoureuse. Nous vous recommandons vivement d'utiliser
#   aussi unpacker sur le site distant.

uuencode="/usr/bin/uuencode"
outfile="/tmp/rb.$$.tgz"
outfname="backup.$(date +%y%m%d).tgz"
infile="/tmp/rb.$$.in"

trap "/bin/rm -f $outfile $infile" 0

if [ $# -ne 2 -a $# -ne 3 ] ; then
  echo -n "Syntaxe: $(basename $0) liste-de-fichiers--sauvegarder " >&2
  echo      "adresse-distante {rpertoire-cible}" >&2
  exit 1
fi

if [ ! -s "$1" ] ; then
  echo "Erreur: la liste  sauvegarder $1 est vide ou manquante" >&2
  exit 1
fi

# Parcourt les entres et construit la liste des fichiers. Ceci
# dveloppe les jokers et chappe par un backslash (\) les espaces des
# noms de fichiers, les modifiant comme suit: ce fichier devient
# ce\ fichier; les apostrophes ne sont donc plus ncessaires.

while read entry; do
  echo "$entry" | sed -e 's/ /\\ /g' >> $infile
done < "$1"

# C'est ici que l'archive est construite, encode et expdie 
#   proprement parler.

tar czf - $(cat $infile) | \
  $uuencode $outfname | \
  mail -s "${3:-Archive de sauvegarde du $(date)}" "$2" 

echo "Termin. $(basename $0) a sauvegard les fichiers suivants:"
sed 's/^/   /' $infile
echo -n "et les a expdis par courrier lectronique  $2 "
if [ ! -z "$3" ] ; then
  echo "avec la requte de rpertoire cible $3"
else
  echo ""
fi

exit 0
