#!/bin/bash # newrm--A replacement for the existing rm command. # This script provides a # rudimentary unremove capability by creating and utilizing a new # directory within the user's home directory. It can handle directories # of content as well as individual files. If the user specifies # the -f flag, files are removed and NOT archived. # Big Important Warning: You'll want a cron job or something similar to keep # the trash directories tamed. Otherwise, nothing will ever actually # be deleted from the system, and you'll run out of disk space! archivedir="$HOME/.deleted-files" realrm="$(which rm)" copy="$(which cp) -R" if [ $# -eq 0 ] ; then # let 'rm' output the usage error exec $realrm # our shell is replaced by /bin/rm fi # Parse all options looking for '-f' flags="" while getopts "dfiPRrvW" opt do case $opt in f ) exec $realrm "$@" ;; # exec lets us exit this script directly. * ) flags="$flags -$opt" ;; # other flags are for 'rm', not us esac done shift $(( $OPTIND - 1 )) # BEGIN MAIN SCRIPT # ================= # Make sure that the $archivedir exists if [ ! -d $archivedir ] ; then if [ ! -w $HOME ] ; then echo "$0 failed: can't create $archivedir in $HOME" >&2 exit 1 fi mkdir $archivedir chmod 700 $archivedir# a little bit of privacy, please fi for arg do newname="$archivedir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")" if [ -f "$arg" -o -d "$arg" ] ; then $copy "$arg" "$newname" fi done exec $realrm $flags "$@" # our shell is replaced by realrm