#!/bin/bash

# Skrypt sftpsync zapisujący na zewnętrznym serwerze we wskazanym
# katalogu wszystkie nowe i zmienione pliki. Wykorzystywany jest
# w tym celu plik .timestamp z ze znacznikami czasów.

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

#trap "`which rm` -f $tempfile" 0 1 15      # Usunięcie tymczasowego pliku na koniec.

if [ $# -eq 0 ] ; then
  echo "Użycie: $0 użytkownik@serwer { katalog }" >&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
  # Jeżeli nie ma pliku ze znacznikami czasu, wysyłane są wszystkie pliki.
  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: Brak plików do zapisania na serwerze $server." >&2
  exit 1
fi

echo "quit" >> $tempfile

echo "Synchronizacja. Liczba lokalnych plików do zapisania na serwerze: $count."

if ! sftp -b $tempfile "$user@$server" ; then
  echo "Koniec. Wszystkie pliki są zsynchronizowane z serwerem $server."
  touch $timestamp
fi

exit 0
