From 60d6c8e75cfec1e30ca0f6bd113dbbfa051c697c Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Wed, 25 Jan 2012 17:44:09 +0100 Subject: [Trash] Better trash managment with relative paths support --- 70_Trash.zsh | 74 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 25 deletions(-) (limited to '70_Trash.zsh') diff --git a/70_Trash.zsh b/70_Trash.zsh index 0dbe042..c639db1 100644 --- a/70_Trash.zsh +++ b/70_Trash.zsh @@ -10,56 +10,80 @@ TRASH=$ZDOTDIR/.trash -move_to_trash () +delete () { - FOLDER=$TRASH/$PWD + local element real_element for element in $@ do - if [ -e $element ] + real_element=$(readlink -f $(dirname $element))/$(basename $element) + if [ -e $real_element ] then echo "Deleting $element..." - mkdir -p $FOLDER/${element:h} - mv -f $element $FOLDER/${element:h}/. + if [ ! -d $real_element ] + then + mkdir -p $TRASH${real_element:h} + else + mkdir -p $TRASH$real_element + fi + mv $element $TRASH$real_element + else + echo "Skipping unknown '$element' ..." fi done } -list_deleted_elements () +lsdel () { - FOLDER=$TRASH/$PWD + local LS_OPTS __ARG + while [ $# -gt 0 ] + do + typeset -A __ARG + __ARG=$1 + shift + + [ $__ARG == "--" ] && break + + if [ $__ARG[1] == "-" ] + then + LS_OPTS="$LS_OPTS $__ARG" + else + set -- ${@:-"--"} $__ARG + fi + done - if [ -d $FOLDER ] - then - ls -lad $(find $FOLDER -maxdepth 1 ! -wholename $FOLDER) | sed "s:$FOLDER/::" - else - echo "Nothing found in trash." - fi + + for element in ${@:-.} + do + element=$(readlink -f $element) + [ ! -d $element ] && element_dir=${element:h} || element_dir=$element + if [ -e $TRASH$element ] + then + echo "Deleted from $element_dir:" + ls ${=LS_OPTS} $TRASH$element | sed "s'$TRASH$element_dir/''" + else + echo "Nothing found in trash for '$element'." + fi + done } -undelete_from_trash () +undel () { - FOLDER=$TRASH/$PWD for element in $@ do - if [ -e $FOLDER/$element ] + if [ -e ~trash/$element ] then echo "Getting back $element..." mkdir -p ${element:h} - mv $FOLDER/$element . - rmdir --ignore-fail-on-non-empty -p $FOLDER + mv ~trash/$element . + rmdir --ignore-fail-on-non-empty -p ~trash 2>&- else echo "Not found in trash: $element" fi done } -alias delete='move_to_trash' -alias undelete='undelete_from_trash' -alias lsdeleted='list_deleted_elements' - -alias cdtrash='cd $TRASH/$PWD' -alias sotrash='cd ${PWD/$TRASH/}' +alias lldel='lsdel -l' +alias ldel='lsdel -lh' -hash -d trash=$TRASH -- cgit v1.2.3