#!/usr/bin/env bash set -u usage() { cat <&2; exit 1;; esac done shift $(($OPTIND - 1)) || exit $? if ! test $# -eq 2 then usage 1>&2 exit 1 fi src="$1" dest="$2" rsync_opts="-aH --delete" rsync_version=$(rsync --version) if [[ ! "$rsync_version" =~ "ACLs" ]] || [[ "$rsync_version" =~ "no ACLs" ]]; then echo "Not syncing ACLs (not supported by available rsync)" 1>&2 else case $OSTYPE in cygwin|darwin|netbsd) echo "Not syncing ACLs (not yet supported on $OSTYPE)" 1>&2 ;; *) rsync_opts="$rsync_opts -A" ;; esac fi xattrs_available='' if [[ ! "$rsync_version" =~ "xattrs" ]] || [[ "$rsync_version" =~ "no xattrs" ]]; then echo "Not syncing xattrs (not supported by available rsync)" 1>&2 else xattrs_available=yes fi # rsync may fail if -X is specified and the filesystems don't support # xattrs. if test "$xattrs_available"; then rsync $rsync_opts -X "$src" "$dest" if test $? -ne 0; then # Try again without -X exec rsync $rsync_opts "$src" "$dest" fi else exec rsync $rsync_opts "$src" "$dest" fi