#!/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