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
 #!/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() {
 # 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)
        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."
 
 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
         echo "$help"
         return 0
     fi
@@ -38,6 +38,7 @@ links to each TARGET in DIRECTORY."
 
 
     local x ret prefix dir to_remove
 
 
     local x ret prefix dir to_remove
+    local mkdir=false
 
     to_remove=()
     if [[ $nodir ]]; then
 
     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
         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 [[ -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
     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 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
                 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
     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 "$@"
     ln -s $nodir -- "$@"
 }
 lnf "$@"