diff --git a/dotfiles/.local/bin/symlink-to-files b/dotfiles/.local/bin/symlink-to-files new file mode 100644 index 00000000..b301d26d --- /dev/null +++ b/dotfiles/.local/bin/symlink-to-files @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# Example: find . -type l -exec /path/tos/script {} + + +set -e + +for link; do + test -h "$link" || continue + + dir=$(dirname "$link") + reltarget=$(readlink "$link") + case $reltarget in + /*) abstarget=$reltarget;; + *) abstarget=$dir/$reltarget;; + esac + + rm -fv "$link" + cp -afv "$abstarget" "$link" || { + # on failure, restore the symlink + rm -rfv "$link" + ln -sfv "$reltarget" "$link" + } +done