#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' # Create symlink after backing up the target. usage="Usage: ${0##*/} source_file target_file" src=${1:?$usage} tgt=${2:?$usage} bak=~/.backup [[ ! -d $bak ]] && mkdir $bak # Check if the desired link already exists. [[ -L "$tgt" && "$(readlink $tgt)" = "$src" ]] && exit # Move an existing file to the back up folder. [[ -e "$tgt" ]] && mv -v "$tgt" "$bak/${tgt##*/}-$(date '+%Y%m%d-%H%M%S')" || true ln -sfv "$src" "$tgt"