add -h arg for help
[lnf] / lnf
diff --git a/lnf b/lnf
index b4701dff636fad888363677ddac4d716dfdea61d..2518c1c4ac60cf35147ba72bdc886c252759bbe2 100755 (executable)
--- a/lnf
+++ b/lnf
@@ -1,23 +1,23 @@
 #!/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 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.
+Removes existing files using trash-put or rm -rf if it is not available,
+or trash-put fails due to a limitation such as 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
 links to each TARGET in DIRECTORY."
 
-    if [[ $1 == --help || $# -eq 0 ]]; then
+    if [[ $1 == --help || $1 == -h || $# -eq 0 ]]; then
         echo "$help"
         return 0
     fi
@@ -38,6 +38,7 @@ links to each TARGET in DIRECTORY."
 
 
     local x ret prefix dir to_remove
+    local mkdir=false
 
     to_remove=()
     if [[ $nodir ]]; then
@@ -45,13 +46,10 @@ links to each TARGET in DIRECTORY."
         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
@@ -82,7 +80,7 @@ links to each TARGET in DIRECTORY."
                 echo "$0: using rm -rf to overcome cross filesystem trash-put limitation"
                 rm -rf -- "${to_remove[@]}"
             elif [[ $ret == 74 ]]; then
-                echo "$0: using rm -rf to overcome empty file/dir trash-put limitation"
+                echo "$0: using rm -rf to overcome empty file & hardlink trash-put limitation"
                 rm -rf -- "${to_remove[@]}"
             elif [[ $ret && $ret != 0 ]]; then
                 return $x
@@ -93,6 +91,14 @@ links to each TARGET in DIRECTORY."
     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 "$@"