[alt.sources] rm with hope part 2

waynet@tolerant.UUCP (08/25/87)

A request went out recently for on comp.sources.wanted asking for an rm
that gave a second chance.          Remember APRIL 1 ;-) 

This one came from someone didn't leave their name on the source.
--
my review intercedes
--
rmsecure - is a script (slow) which will do filename expansion and, if any
           wildcards are used, echo the expanded fileset and ask you if
           your sure. This gives you a chance to preview your rm fileset.
--
#! /bin/sh
# To extract, remove mail header lines and type "sh filename"
echo x - rmsecure.csh
sed -e 's/^X//' > rmsecure.csh << '!FaR!OuT!'
X#! /bin/csh -f
X# csh script ; secure remove of files
Xonintr out
Xset interact
Xset force
Xset recur
Xset minus
Xwhile ("$1" == "-" || "$1" =~ -[f,i,r])
X    switch ($1)
X	case -i: 
X	    set interact=-i
X	    shift
X	    breaksw
X	case -f: 
X	    set force=-f
X	    shift
X	    breaksw
X	case -r: 
X	    set recur=-r
X	    shift
X	    breaksw
X	case  -: 
X	    set minus=-
X	    shift
X	    break
X    endsw
Xend
Xif ($interact == -i) then
X    /bin/rm -i $force $recur $minus $*
X    exit($status)
Xendif
Xset f1=`echo $0`
Xset f1=$f1:t" : remove"
Xset r
Xwhile ("$1" != '')
X    set b=`echo $1`
X    if ("$b" != '') then
X	set noglob
X	set a=$1
X	unset noglob
X	if ("$a" == "$b") then
X	    set r="$r $b"
X	else
X	    if ($#b == 1) then
X		echo -n $f1 $b '? '
X		if ( $< == "y" ) then
X		    set r="$r $b"
X		endif
X	    else
X		echo -n $f1 $b '? '| fold
X		if ( $< == "y" ) then
X		    set r="$r $b"
X		else
X		    foreach n ($b)
X			echo -n $f1 $n '? '
X			if ( $< == "y" ) then
X			    set r="$r $n"
X			endif
X		    end
X		endif
X	    endif
X	endif
X    endif
X    shift
Xend
X/bin/rm $force $recur $minus $r
Xout: 
Xexit(0)
!FaR!OuT!
echo x - rmsecure.doc
sed -e 's/^X//' > rmsecure.doc << '!FaR!OuT!'
XAdding security when removing files:
X------------------------------------
X
XDESCRIPTION:
X------------
XWith the standard "rm", no confirmation is asked when using wild cards;
Xyou surely once experienced that this may be really catastrophic.
XIf not, think about a misstyping like "rm * BAK" instead of "rm *BAK" !!!
X
XA new command, "rmsecure", may prevent this by asking for a confirmation
Xbefore removing any file whose name issued from a wild card expansion.
X
XThis command works a bit slower than the usual "rm", but is really safer !
X
X
XUSE:
X---
XTo use it, you MUST create a special alias like this one:
X
X	alias rm '(set noglob; rmsecure \!*)'
X
Xin order to prevent former wild cards expansion by the shell.
X
XWhen used, any list of files resulting from a wild card expansion will be
Xasked globally for confirmation prior to deletion; if answer is negative,
Xeach file in the expanded list will be prompted separatly, like the "-i"
Xoption of usual "rm".
X
XAs reel deletion take place only just before completion of the command,
Xthis one can be safely interrupted at any time if necessary; in this case,
Xno file will be removed.
X
X
XWARNING:
X--------
XFiles whose name is completely specified won't be asked for confirmation,
Xeven if they appear between other arguments using wild cards.
X
X
XLIMITS:
X-------
X - as all expanded file names are concatened within one unique string,
X   command can fail due to limitation of shell variable length.
X   To overcome this, just select narrowed range.
X
X - due to successive evaluations, any quotes or double quotes will be lost;
X   removing files with "strange" names should be done with the standard "rm"
X   command using the "-i" option with a "*" wild card.
X
X - the following version is running perfectly with Cshell of 4.2 bsd;
X   problems were encountered trying to run it on Unisoft System III,
X   probably due to some limitation of the Cshell implemented.
X
!FaR!OuT!
echo x - shar
sed -e 's/^X//' > shar << '!FaR!OuT!'
X#! /bin/sh
X# To extract, remove mail header lines and type "sh filename"
!FaR!OuT!
exit