X-Git-Url: https://iankelling.org/git/?p=lnf;a=blobdiff_plain;f=lnf-function;fp=lnf-function;h=0000000000000000000000000000000000000000;hp=0d43112818fbc1ef4a59722cdd41665eb003f25d;hb=e51702380450ee0b4719a17744208975730ddff7;hpb=fae0c9143e694a3ed895cee68d1adad9bc359f05 diff --git a/lnf-function b/lnf-function deleted file mode 100644 index 0d43112..0000000 --- a/lnf-function +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -# Copyright (C) 2014 Ian Kelling -# This program is under GPL v. 3 or later, see - -lnf() { - local help="lnf - Create symlinks conveniently and forcefully. -Usage: - lnf -T TARGET LINK_NAME (1st form) - lnf TARGET (2nd form) - lnf TARGET... DIRECTORY (3rd form) - -Remove existing file in the using trash-put or rm -rf if it is not available. -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 - echo "$help" - return 0 - fi - - local nodir - if [[ $1 == -T ]]; then - nodir=-T - shift - if (( $# != 2 )); then - echo "lnf error: expected 2 arguments with -T flag. Got $#" - return 1 - fi - fi - - local reset_extglob=false - ! shopt extglob >/dev/null && reset_extglob=true - shopt -s extglob - - - local remove x - if type -P trash-put >/dev/null; then - remove=trash-put - else - remove="rm -rf" - fi - - if [[ $nodir ]]; then - if [[ -e "$2" || -L "$2" ]]; then - $remove "$2" - elif ! mkdir -p "$(dirname "$2")"; then - echo "lnf error: failed to make directory $(dirname "$2")" - return 1 - fi - elif (( $# >= 2 )); then - if [[ -d ${!#} ]]; then - local oldcwd=$PWD - cd "${!#}" # last arg - for x in "${@:1:$(( $# - 1 ))}"; do # all but last arg - # remove any trailing slashes, uses extglob - x="${x%%+(/)}" - # remove any leading directory components - x="${x##*/}" - [[ -e "$x" || -L "$x" ]] && $remove "$x" - done - cd "$oldcwd" - else - if ! mkdir -p "${!#}"; then - echo "lnf error: failed to make directory ${!#}" - return 1 - fi - fi - elif [[ $# -eq 1 ]]; then - [[ -e "${1##*/}" || -L "${1##*/}" ]] && $remove "${1##*/}" - fi - - $reset_extglob && shopt -u extglob - ln -s $nodir -- "$@" -}