#!/bin/bash
# rsynchro: a script to synchronize selected local files with 
# those on a remote host, and vice versa.
#
# Mark Alford, 2000-2017

local_dir=/home/myname    
  # could use ${HOME} if that's appropriate
remote_machine="myname@distant.machine.edu"
remote_dir=${remote_machine}:/home/myname

# names to use in printed messages:
local_dir_desc=${HOSTNAME}:${local_dir}
remote_dir_desc=${remote_dir} 

listfile_name=rsynchro.lis
  # The listfile specifies which files in $local_dir will be
  # synchronized with $remote_dir (or vice versa).

listfile_path=${HOME}/${listfile_name}
backupdir=rsync_backup/`date '+%F'`
  # deleted files or old versions will be backed up to 
  # rsync_backup/20XX-XX-XX, so you can always retrieve things clobbered by rsync

if [[ `grep -c ' $' ${listfile_path}` != 0 ]]
then
  echo WARNING: some lines in ${listfile_path} have trailing spaces
fi

echo Upload from ${local_dir_desc} to  ${remote_dir_desc},
echo or
echo download from ${remote_dir_desc} to ${local_dir_desc} \?
read -p "(up/down)? " resp
if [[ "${resp}" == "up" ]]
then
  from_dir=${local_dir}
  from_dir_desc=${local_dir_desc}
  to_dir=${remote_dir}
  to_dir_desc=${remote_dir_desc}
else
  if [[ "${resp}" == "down" ]]
  then
    to_dir=${local_dir}
    to_dir_desc=${local_dir_desc}
    from_dir=${remote_dir}
    from_dir_desc=${remote_dir_desc}
  else
    exit 2
  fi
fi

resp=xxx
while [[ "${resp}" != "y" && "${resp}" != "n" ]]
do
  echo Delete files on ${to_dir_desc} 
  read -p "that do not exist on ${from_dir_desc} (y/n)? " resp
done

if [[ ${resp} == "y" ]]
then
  delopt="--delete"
else
  delopt=""
fi

echo copying files listed in ${listfile_path} 
echo from ${from_dir_desc} 
echo \ \ to ${to_dir_desc}
if [[ ${delopt} == "--delete" ]]
then
  echo \*\*\*WITH DELETION\*\*\*
fi
echo

resp=xxx
while [[ ${resp} != "y" && ${resp} != "n" ]]
do
  read -p "Dry run first (y/n)? " resp
done

rsyncout=`mktemp`

if [[ ${resp} == "y" ]]
then
  rsync -e ssh --compress  --archive ${delopt} --update  \
  --cvs-exclude --verbose --progress --dry-run ${opts_personal} \
  --backup --backup-dir=${backupdir} \
      --include-from=${listfile_path}  --exclude "*" \
    ${from_dir}/ ${to_dir} | tee ${rsyncout}
  echo ==== DELETIONS:
  grep '^deleting' ${rsyncout}
  echo ====
  echo
  resp2=xxx
  while [[ ${resp2} != "y" && ${resp2} != "n" ]]
  do
    read -p "Now do it for real (y/n)? " resp2
  done
  do_it=${resp2}
else
  do_it="y"
fi

if [[ ${do_it} == "y" ]]
then
  rsync -e ssh  --compress --archive ${delopt} --update  \
  --verbose --progress  --cvs-exclude  ${opts_personal} \
  --backup --backup-dir=${backupdir} \
  --include-from=${listfile_path} --exclude "*" \
    ${from_dir}/ ${to_dir}
fi

exit 0

