#!/bin/bash
# Skrypt remotebackup umieszczający w jednym skompresowanym
# archiwum pliki i katalogi, wysyłanym następnie na zewnętrzny
# adres e-mail. Skrypt może być uruchamiany co noc w celu zabezpieczenia
# najważniejszych plików, ale nie może zastępować bardziej
# rygorystycznych strategii tworzenia zapasowych kopii danych.

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

trap "`which rm` -f $outfile $infile" 0

if [ $# -ne 2 -a $# -ne 3 ] ; then
  echo "Użycie: $(basename $0) lista_plików adres_e-mail" >&2
  exit 1
fi

if [ ! -s "$1" ] ; then
  echo "Błąd: plik $1 nie istnieje lub jest pusty." >&2
  exit 1
fi

# Analiza nazw plików i tworzenie listy infile. Znaki wieloznaczne
# są rozwijane, spacje poprzedzane ukośnikiem. W ten sposób np.
# nazwa 'ten plik' jest zamieniana na 'ten\ plik' i nie trzeba jej
# umieszczać w cudzysłowach.

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

# Właściwy kod tworzący, kodujący i wysyłający archiwum.

tar czf - $(cat $infile) | \
  uuencode $outfname | \
  mail -s "Archiwum z dnia $(date +%Y-%m-%d)" "$2"

echo "Koniec. Zarchiwizowane pliki:"
sed 's/^/   /' $infile
echo "zostały wysłane na adres $2."

exit 0
