#!/bin/bash declare -A to_copy to_rsync repo="$(pwd)" # files to copy to_copy["${HOME}/.bashrc"]='shell/bashrc' # directories to copy to_rsync["${HOME}/.config/aliases"]='aliases' # directories to copy to_rsync["${HOME}/bin"]='bin' for src in "${!to_copy[@]}"; do dst="${to_copy[$src]}" dir="$(dirname "$dst")" file="$(basename "$dst")" if [[ ! -d "${repo}/${dir}" ]]; then mkdir -p "${repo}/${dir}" fi rsync -a "$src" "${repo}/${dir}/${file}" if [[ $? != 0 ]]; then printf 'Copying "%s" to "%s" had an error.\n' "$src" "$dst" >&2 fi done for src in "${!to_rsync[@]}"; do dst="${to_rsync[$src]}" if [[ ! -d "$src" ]]; then printf '"%s" does not exist. Can not copy.\n' "$src" >&2 else (cd "$src" && rsync -a * "${repo}/${dst}/") fi done