Linux-Noob Forums

Full Version: shell script recycle bin
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

Code:
#!/bin/bash
#-----------------------------------------------------------------
#     filename:                                                                    
#       author: wds                                                                
#        begin:2008.1.27                                                                    
#          end:2008.2.1                                                                    
#      version: v.2      
#-----------------------------------------------------------------
from1=$1
from2=$2
garbage=$HOME/.garbage
mvlog=$garbage/mv.log
if [ ! -e $garbage ]
then
mkdir -p $garbage
chmod 777 $garbage
fi
function rand
{
a=(0 1 2 3 4 5 6 7 8 9 a b c d e A B C D E F )
for ((i=0;i<7;i++));do
    echo -n ${a[$RANDOM % ${#a[*]}]}
done
}
random=$(rand)
function rm1
{
if [ -d "$from1" ]
then
  echo "rm: cannot remove '$from1/' : Is a directory"
else
  echo "`pwd`/:$from1:$random:`date`" >> $mvlog
  mv "$from1"  "$garbage/$from1:$random"
fi
}
function more
{
for file in *
do
echo "`pwd`/:$file:$random:`date`" >> $mvlog
mv $file "$garbage/$file:$random"
done 2> /dev/null
}
function rmi
{
if [ ! -d "$from2" ]
then
  echo -n "rm:remove regular empty file '$from2'?"; read answer;
if [ "$answer" = 'y' -o "$answer" = 'Y' ]
then
    echo "`pwd`/:$from2:$random:`date`" >> $mvlog
     mv "$from2" "$garbage/$from2:$random"
fi
else
  echo "rm: cannot remove directory '$from2': Is a directory"  
fi

}
function rmf
{
if [ ! -d "$from2" ]
then
    echo "`pwd`/:$from2:$random:`date`" >> $mvlog
     mv "$from2" "$garbage/$from2:$random"
else
  echo "rm: cannot remove directory '$from2': Is a directory"
fi
}
function rmr
{
if [ -e "$from2" ]
then
    result=$(echo $from2 | sed 's/\///g')
    echo "`pwd`/:$result:$random:`date`" >> $mvlog
     mv "$result" "$garbage/$result:$random"
fi

}
function rml
{
while :
do
clear
line=$(cat -n $mvlog | awk -F : '{print $1,"FileName:"$2,    "Time:"$4}')
linecount=$(cat $mvlog | wc -l)
echo -e "$line\c"
echo
echo
echo "Please input number you want revent(line count:$linecount)--exit(e)"
read answer
if [ "$answer" = e -o "$answer" = E ]
then
break
else
(
echo "please input y(sure:)"
   read answer1
   if [ "$answer1" = y -o "$answer" = Y ]
    then
      address=$(sed -n "$answer""p" $mvlog | awk -F : '{print $1}')
      filename=$(sed -n "$answer""p" $mvlog | awk -F : '{print $2}')
      filerand=$(sed -n "$answer""p" $mvlog | awk -F : '{print $3}')
      fullname=$address$filename
       if [ -e "$fullname" ]
        then
           echo "The file exist!"
           sleep 1
       else
           old="$garbage/$filename:$filerand"
           new="$address$filename"
           mv "$old" "$new"
           delline=$( cat $mvlog | sed "$answer""d" | sort -o $mvlog)
           echo "update ok!!!"
           sleep 1
       fi
   fi
)
fi
done

}
function help
{
echo "
-i)  If you wants delete some file , this function is confirm you want,the same as old rm.
-f)  If you wants delete some directory ,you can use this function ,the same as old rm.
-r)  If you wants delete some directory of file ,this function can use , the same as old rm.
-l)  This is new function,is you wants resume some file or directory you can use this function,
first this function can list some file in you garbage , these have some number ,if you
wants resume 1,you can input 1 and then input y to confirm.
If you want add some function or some new idear please contact me...
author:wds
  email:7717060@sina.com

"
}

case "$1"
in
[a-z]) :;;
[0-9]) :;;
[A-Z]) :;;
?) more;;
*) :;;
esac
if [ "$#" -eq 0 ]
then
  echo -n "rm: missing operand
Try 'rm --help' for more informaction.
"
fi
if [ "$#" -eq 1 ]
then
  case "$from1"
  in
   -i) echo "Try 'rm --help' for more informaction."; break;;
   -f) echo "Try 'rm --help' for more informaction."; break;;
   -r) echo "Try 'rm --help' for more informaction."; break;;

   -l) rml;;
  --help) help;;
    *) rm1;;
  esac
fi

if [ "$#" -eq 2 ]
then
case "$from1"
  in
   -i) rmi;;
   -f) rmf;;
   -r) rmr;;
   -l) rml;;
  -rf) rmr;;
  --help) help;;
esac
fi  

if [ "$#" -gt 2 ]
     then
       for file in $*
         do
           mv $file "$home/"
       done 2> /dev/null
    fi