X-Git-Url: https://iankelling.org/git/?p=lnf;a=blobdiff_plain;f=lnf;h=1dd62f9822a5a723488615d89f81999f97290104;hp=b4701dff636fad888363677ddac4d716dfdea61d;hb=e9c8ef17b3035204d39ecc511d4418e2b4a590cc;hpb=e51702380450ee0b4719a17744208975730ddff7 diff --git a/lnf b/lnf index b4701df..1dd62f9 100755 --- a/lnf +++ b/lnf @@ -1,17 +1,17 @@ #!/bin/bash -# Copyright (C) 2014 Ian Kelling +# Copyright (C) 2014-2016 Ian Kelling # This program is under GPL v. 3 or later, see 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 @@ -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 @@ -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 "$@"