#!/bin/bash
-# Copyright (C) 2014 Ian Kelling
+# Copyright (C) 2014-2016 Ian Kelling
# This program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>
lnf() {
- local help="lnf - Create symlinks conveniently and forcefully.
-Usage:
+ local help="Usage:
lnf -T TARGET LINK_NAME (1st form)
lnf TARGET (2nd form)
lnf TARGET... DIRECTORY (3rd form)
+Create symlinks conveniently and forcefully
-Remove existing file in the using trash-put or rm -rf if it is not available,
-or trash-put fails due to a cross-filesystem link.
-Create directory if needed. Slightly more restrictive arguments than ln.
+Removes existing files using trash-put or rm -rf if it is not available,
+or trash-put fails due to a cross-filesystem link. Create directory if
+needed. Slightly more restrictive arguments than ln.
In the 1st form, create a link to TARGET with the name LINK_NAME. In the 2nd
form, create a link to TARGET in the current directory. In the 3rd form, create
local x ret prefix dir to_remove
+ local mkdir=false
to_remove=()
if [[ $nodir ]]; then
if [[ -e $2 || -L $2 ]]; then
to_remove+=("$2")
elif [[ ! -d $dir ]]; then
+ mkdir=true
if [[ -e $dir || -L $dir ]]; then
to_remove+=("$dir")
fi
- if ! mkdir -p "$(dirname "$2")"; then
- echo "lnf error: failed to make directory $(dirname "$2")"
- return 1
- fi
fi
elif (( $# >= 2 )); then
if [[ -d ${!#} ]]; then
fi
$reset_extglob && shopt -u extglob
+
+ if $mkdir; then
+ if ! mkdir -p "$(dirname "$2")"; then
+ echo "lnf error: failed to make directory $(dirname "$2")"
+ return 1
+ fi
+ fi
+
ln -s $nodir -- "$@"
}
lnf "$@"