#!/bin/sh -e # Created by Robert Grønning # Usage info show_help() { cat << EOF Usage: ${0##*/} SOURCE DESTINATIONFOLDER This script will help you to make SOURCE a symbolic link pointing toward the actual data residing in DESTINATIONFOLDER. EOF } SRC=${1%/} DSTDIR=${2%/} # Make sure both parameters are filled in if [ -z "$SRC" ] || [ -z "$DSTDIR" ]; then show_help exit 0 fi NAME=$(basename "$SRC") DST=$DSTDIR/$NAME # Make sure both aren't missing if [ ! -e "$SRC" ] && [ ! -e "$DST" ]; then echo 'ERROR: Neither exist.' echo show_help exit 1 fi # Make sure DSTDIR exist if [ -e "$SRC" ] && [ ! -e "$DSTDIR" ]; then echo 'WARNING: The following folder does not yet exist:' echo " $DSTDIR" echo echo 'Do you want to create it? (y|n) :' read -r REPLY if [ "$REPLY" = y ]; then echo echo "Running: mkdir -p \"$DSTDIR\"" mkdir -p "$DSTDIR" else echo echo "\"y\" was not received. Aborting." exit 0 fi fi # Make sure DSTDIR is a directory if [ ! -d "$DSTDIR" ]; then echo 'ERROR: The following is not a directory:' echo " $DSTDIR" echo show_help exit 1 fi # Make sure SRC is not a symbolic link if [ -h "$SRC" ]; then echo 'ERROR: The following is already a symbolic link:' echo " $SRC" echo show_help exit 1 fi # Create symbolic link when only DST exist if [ -e "$DST" ] && [ ! -e "$SRC" ]; then echo "Running: ln -s \"$DST\" \"$SRC\"" ln -s "$DST" "$SRC" exit 0 fi # Create symbolic link when only SRC exist if [ ! -e "$DST" ] && [ -e "$SRC" ] && [ ! -h "$SRC" ]; then echo "Running: mv \"$SRC\" \"$DST\"" mv "$SRC" "$DST" echo "Running: ln -s \"$DST\" \"$SRC\"" ln -s "$DST" "$SRC" exit 0 fi # Create symbolic link when both SRC and DST exist if [ -e "$DST" ] && [ -e "$SRC" ] && [ ! -h "$SRC" ]; then echo 'WARNING: Both exist.' echo echo 'Options:' echo " d: Sacrifice \"$SRC\"" echo " s: Sacrifice \"$DST\"" echo " n: Don't do anything." echo echo "What do you want to do? (d|s|n) :" read -r REPLY case "$REPLY" in d ) echo echo "Running: rm -R \"$SRC\"" rm -R "$SRC" echo "Running: ln -v -s \"$DST\" \"$SRC\"" ln -v -s "$DST" "$SRC" exit 0 ;; s ) echo echo "Running: rm -R \"$DST\"" rm -R "$DST" echo "Running: mv \"$SRC\" \"$DST\"" mv "$SRC" "$DST" echo "Running: ln -s \"$DST\" \"$SRC\"" ln -s "$DST" "$SRC" exit 0 ;; * ) exit 1 ;; esac fi