diff --git a/TODO.txt b/TODO.txt index fe19794..37daa0e 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,4 +1,4 @@ -- Handle filenames and destinations with spaces in them +- Add environment variable to override defaults - Make serial number postfix consistent across dirs and files - Add -h help and usage screen @@ -10,3 +10,5 @@ you can clean multiple graveyards with: /trm.sh -g ./foo -d -g ./baz -d + +- Note difference between -vd and -dv diff --git a/trm.sh b/trm.sh index 2bbcb2c..e89741a 100755 --- a/trm.sh +++ b/trm.sh @@ -1,5 +1,5 @@ #!/bin/sh -# trm.sh - Safer 'rm' +# trm.sh - Safer 'rm' And Backup Utility # Copyright (c) 2016 TundraWare Inc., Des Plaines, IL USA # All Rights Reserved # Permission granted for the free use of this program without restriction @@ -75,55 +75,60 @@ # Process arguments shift $((OPTIND-1)) - for arg in $* + while [ $# -gt 0 ] do - # Symlinks require special care - if [ -L $arg ] + # Symlinks require special care + if [ -L "$1" ] + then + + # Bare symlink itelf + REALPATH=$(readlink -f $(dirname "$1")) + if [ "${REALPATH}" = '/' ] then - - # Bare symlink itelf - REALPATH=$(readlink -f $(dirname $arg)) - if [ ${REALPATH} = '/' ] - then - REALPATH="" - fi - - REALPATH=${REALPATH}/$(basename $arg) - - # Process normal files and directories - else - REALPATH=$(readlink -f $arg) + REALPATH="" fi - # See if we want serial numbers - SERIAL="" - if [ -n "${SERIALNO}" ] - then - SERIAL=".$(date +%Y%m%d%H%M%S)" - fi + REALPATH="${REALPATH}"/$(basename "$1") - SRCDIR=$(dirname $REALPATH) - if [ ${SRCDIR} = '/' ] - then - SRCDIR="" - fi - SRCFIL=$(basename $REALPATH) - DESDIR=${GRAVEYARD}${SRCDIR} - DESFIL="${SRCFIL}${SERIAL}" + # Process normal files and directories + else + REALPATH=$(readlink -f "$1") + fi - CMD="${OPERATOR} $VERBOSE '${REALPATH}' '${DESDIR}/${DESFIL}'" - if [ -n "${TESTMODE}" ] - then - echo ${TESTMODE} - echo ${CMD} - else - mkdir -p ${DESDIR} - eval ${CMD} - fi + # See if we want serial numbers + SERIAL="" + if [ -n "${SERIALNO}" ] + then + SERIAL=".$(date +%Y%m%d%H%M%S)" + fi + + SRCDIR=$(dirname "${REALPATH}") + if [ "${SRCDIR}" = '/' ] + then + SRCDIR="" + fi + + SRCFIL=$(basename "${REALPATH}") + DESDIR="${GRAVEYARD}${SRCDIR}" + DESFIL="${SRCFIL}${SERIAL}" + + CMD="${OPERATOR} $VERBOSE '${REALPATH}' '${DESDIR}/${DESFIL}'" + if [ -n "${TESTMODE}" ] + then + echo ${TESTMODE} + echo ${CMD} + else + mkdir -p "${DESDIR}" + eval ${CMD} + fi + + shift done } -trm $* +# Uncomment to invoke as a free standing utility + +# trm "$@"