#!/bin/sh : ${RCM_LIB:=`dirname $0`/../share/rcm} . $RCM_LIB/rcm.sh remove_link() { local dest=$1 local original=$2 local sigil=$3 if [ x$dest = "x/" ]; then $VERBOSE "not a symlink, skipping: $original" elif [ -L $dest -o "x$sigil" = "xX" ]; then $RM -rf $dest rmdir -p `dirname $original` 2>/dev/null else remove_link `dirname $dest` $original fi } show_help() { local exit_code=${1:-0} $PRINT "Usage: rcdn [-Vqvh] [-I EXCL_PAT] [-x EXCL_PAT] [-t TAG] [-d DOT_DIR]" $PRINT "see rcdn(1) and rcm(5) for more details" exit $exit_code } handle_command_line() { local arg_tags= local verbosity=0 local version=0 local run_hooks=0 local dotfiles_dirs= local files= local excludes= local includes= while getopts VqvhI:x:t:d: opt; do case "$opt" in h) show_help ;; I) includes="$includes $OPTARG";; k) run_hooks=1 ;; K) run_hooks=0 ;; t) arg_tags="$arg_tags $OPTARG" ;; v) verbosity=$(($verbosity + 1));; q) verbosity=$(($verbosity - 1));; d) dotfiles_dirs="$dotfiles_dirs $OPTARG" ;; V) version=1 ;; x) excludes="$excludes $OPTARG" ;; esac done shift $(($OPTIND-1)) handle_common_flags rcup $version $verbosity tags=${arg_tags:-$TAGS} dotfiles_dirs=${dotfiles_dirs:-$DOTFILES_DIRS} files=$@ RUN_HOOKS=$run_hooks for tag in $tags; do LS_ARGS="$LS_ARGS -t $tag" done for dotfiles_dir in $dotfiles_dirs; do LS_ARGS="$LS_ARGS -d $dotfiles_dir" done for exclude in $excludes; do LS_ARGS="$LS_ARGS -x $exclude" done for include in $includes; do LS_ARGS="$LS_ARGS -I $include" done LS_ARGS="$LS_ARGS $files" $DEBUG "LS_ARGS: $LS_ARGS" } LS_ARGS=-F if [ -e $HOME/.rcrc ]; then . $HOME/.rcrc fi handle_command_line $* : ${DOTFILES_DIRS:=$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR} run_hooks pre down for dest_and_src in `lsrc $LS_ARGS`; do saved_ifs=$IFS IFS=: set $dest_and_src IFS=$saved_ifs dest=$1 sigil=$3 remove_link $dest $dest $sigil done run_hooks post down