#!/bin/sh

# sftpsync - tant donn un rpertoire cible sur un serveur sftp,
#   s'assure que tous les fichiers nouveaux ou modifis localement sont
#   tlchargs sur le systme distant. Utilise pour ses propres
#   besoins un fichier d'estampille temporelle appel .timestamp


timestamp=".timestamp"
tempfile="/tmp/sftpsync.$$"
count=0

trap "/bin/rm -f $tempfile" 0 1 15      # on dtruit le fichier
  # temporaire  la fin du script et quand on reoit des signaux


if [ $# -eq 0 ] ; then
  echo "Syntaxe: $0 utilisateur@hte { rpertoire_distant }" >&2
  exit 1
fi

user="$(echo $1 | cut -d@ -f1)"
server="$(echo $1 | cut -d@ -f2)"

if [ $# -gt 1 ] ; then
  echo "cd $2" >> $tempfile
fi

if [ ! -f $timestamp ] ; then
  # pas d'estampille temporelle; on met  jour tous les fichiers
  for filename in *
  do 
    if [ -f "$filename" ] ; then
      echo "put -P \"$filename\"" >> $tempfile
      count=$(( $count + 1 ))
    fi
  done
else
  for filename in $(find . -newer $timestamp -type f -print)
  do 
    echo "put -P \"$filename\"" >> $tempfile
    count=$(( $count + 1 ))
  done
fi

if [ $count -eq 0 ] ; then
  echo "$0: Aucun fichier n'a besoin d'tre tlcharg sur $server" >&2
  exit 1
fi

echo "quit" >> $tempfile

echo "Synchronisation: il y a $count fichiers du rpertoire local  tlcharger."

if ! sftp -b $tempfile "$user@$server" ; then
  echo "Termin. Tous les fichiers sont synchroniss sur $server"
  touch $timestamp
fi

exit 0
