Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: rmsecure - source for a safe "rm" Message-ID: <1375@panda.UUCP> Date: 5 Feb 86 23:46:45 GMT Sender: jpn@panda.UUCP Lines: 188 Approved: jpn@panda.UUCP Mod.sources: Volume 3, Issue 103 Submitted by: DIDELOT Andre Below is the presentation and the code of a command which replace "rm"; it works exactly the same, except that it just asks for confirmation when its arguments use some wild cards. [ This ONLY works with csh, because it uses aliases, and it may only work with the BSD4.2 or better csh - John P. Nelson, moderator mod.sources ] I wrote it long ago, after having had some bad experiments with conjonction of misstyping and wild cards in the use of the usual "rm" command. These accidents turned sometimes to drama, especially when I was learning the (difficult?:-) job of the superuser. Months along, other users too experimented such personnal disasters and the safe "rm" gained popularity on our site. We have now used it without problems over a year. I would be pleased if it could be of some interest for other (super)users. Andre DIDELOT CHUNET: andre@cui.unige.chunet MAIL: Centre Universitaire d'Informatique UUCP: mcvax!cernvax!cui!andre Universite de Geneve mcvax!cernvax!cui!root Rue du General Dufour 24 CH - 1211 GENEVE 4 BITNET: DIDELOT@CGEUGE51 SWITZERLAND SYSTEM@CGEUGE51 =============================================================================== #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # rmsecure.doc # rmsecure.csh # This archive created: Wed Feb 5 18:39:13 1986 export PATH; PATH=/bin:$PATH echo shar: extracting "'rmsecure.doc'" '(1893 characters)' if test -f 'rmsecure.doc' then echo shar: will not over-write existing file "'rmsecure.doc'" else cat << \SHAR_EOF > 'rmsecure.doc' Adding security when removing files: ------------------------------------ DESCRIPTION: ------------ With the standard "rm", no confirmation is asked when using wild cards; you surely once experienced that this may be really catastrophic. If not, think about a misstyping like "rm * BAK" instead of "rm *BAK" !!! A new command, "rmsecure", may prevent this by asking for a confirmation before removing any file whose name issued from a wild card expansion. This command works a bit slower than the usual "rm", but is really safer ! USE: --- To use it, you MUST create a special alias like this one: alias rm '(set noglob; rmsecure \!*)' in order to prevent former wild cards expansion by the shell. When used, any list of files resulting from a wild card expansion will be asked globally for confirmation prior to deletion; if answer is negative, each file in the expanded list will be prompted separatly, like the "-i" option of usual "rm". As reel deletion take place only just before completion of the command, this one can be safely interrupted at any time if necessary; in this case, no file will be removed. WARNING: -------- Files whose name is completely specified won't be asked for confirmation, even if they appear between other arguments using wild cards. LIMITS: ------- - as all expanded file names are concatened within one unique string, command can fail due to limitation of shell variable length. To overcome this, just select narrowed range. - due to successive evaluations, any quotes or double quotes will be lost; removing files with "strange" names should be done with the standard "rm" command using the "-i" option with a "*" wild card. - the following version is running perfectly with Cshell of 4.2 bsd; problems were encountered trying to run it on Unisoft System III, probably due to some limitation of the Cshell implemented. SHAR_EOF if test 1893 -ne "`wc -c < 'rmsecure.doc'`" then echo shar: error transmitting "'rmsecure.doc'" '(should have been 1893 characters)' fi fi echo shar: extracting "'rmsecure.csh'" '(1066 characters)' if test -f 'rmsecure.csh' then echo shar: will not over-write existing file "'rmsecure.csh'" else cat << \SHAR_EOF > 'rmsecure.csh' #! /bin/csh -f # csh script ; secure remove of files onintr out set interact set force set recur set minus while ("$1" == "-" || "$1" =~ -[f,i,r]) switch ($1) case -i: set interact=-i shift breaksw case -f: set force=-f shift breaksw case -r: set recur=-r shift breaksw case -: set minus=- shift break endsw end if ($interact == -i) then /bin/rm -i $force $recur $minus $* exit($status) endif set f1=`echo $0` set f1=$f1:t" : remove" set r while ("$1" != '') set b=`echo $1` if ("$b" != '') then set noglob set a=$1 unset noglob if ("$a" == "$b") then set r="$r $b" else if ($#b == 1) then echo -n $f1 $b '? ' if ( $< == "y" ) then set r="$r $b" endif else echo -n $f1 $b '? '| fold if ( $< == "y" ) then set r="$r $b" else foreach n ($b) echo -n $f1 $n '? ' if ( $< == "y" ) then set r="$r $n" endif end endif endif endif endif shift end /bin/rm $force $recur $minus $r out: exit(0) SHAR_EOF if test 1066 -ne "`wc -c < 'rmsecure.csh'`" then echo shar: error transmitting "'rmsecure.csh'" '(should have been 1066 characters)' fi fi exit 0 # End of shell archive