dfs@doe.carleton.ca (David F. Skoll) (02/28/91)
In <1991Feb27.211748.13575@wciu.EDU> art@wciu.EDU (Art Nicolaysen) writes: >This is not a totally robust method, however; does anybody want to post >or email me their shell script? I use these shell scripts from the "SunExpert" magazine, not sure of the issue. I wrote the "undel" script and modified the other two. Rather than forcing the user to remove the trashed files, we have a cron job which goes through the directory structure deleting all files beginning with ".#" that are more than a day old. I particularly like these scripts because they leave deleted files in their original directory. However, if you use some 'rm' options like -R, -f, etc., then it just does a regular rm. You can change that if you want. I also alias 'rm' to 'delete' to be on the safe side. #!/bin/sh # This is a shell archive (shar 3.32) # made 02/27/1991 22:23 UTC by dfs@data # Source directory /usr/local/bin # # existing files will NOT be overwritten # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 1316 -rwxr-xr-x delete # 638 -rwxr-xr-x undel # 172 -rwxr-xr-x lsdel # if touch 2>&1 | fgrep 'amc' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= delete ============== if test X"$1" != X"-c" -a -f 'delete'; then echo "File already exists: skipping 'delete'" else echo "x - extracting delete (Text)" sed 's/^X//' << 'SHAR_EOF' > delete && X#!/bin/sh X# rm temporary X# script to do a mv to a .# file rather than doing an actual rm X# By Mathieu Federspeil, 1987 X# X# Recognizes the -i option X Xcase "$1" in X-i) shift X for arg in $* X do X if [ -f $arg -a -w $arg ] X then X if echo $arg | grep "^\.#" > /dev/null X then X echo "$arg is already deleted!" X else X echo -n "$arg [yn] (n) ? " X read yesno X case "$yesno" in X y*|Y*) X base=`basename $arg` X dir=`dirname $arg` X dst=${dir}/.#$base X mv $arg $dst && touch $dst X echo "$arg removed." X ;; X *) X echo "$arg not removed." X esac X fi X elif [ -f $arg ] X then X echo "$arg: write permission denied" X else X echo "$arg: not found." X fi X done ;; X X-*) /bin/rm "$@" ;; X X*) for arg in $* X do X if [ -f $arg -a -w $arg ] X then X if echo $arg | grep "^\.#" > /dev/null X then X echo "$arg is already deleted!" X else X base=`basename $arg` X dir=`dirname $arg` X dst=${dir}/.#$base X mv $arg $dst && touch $dst X fi X elif [ -f $arg ] X then X echo "$arg: write permission denied." X else X echo "$arg: not found." X fi X done ;; Xesac SHAR_EOF $TOUCH -am 1130122190 delete && chmod 0755 delete || echo "restore of delete failed" set `wc -c delete`;Wc_c=$1 if test "$Wc_c" != "1316"; then echo original size 1316, current size $Wc_c fi fi # ============= undel ============== if test X"$1" != X"-c" -a -f 'undel'; then echo "File already exists: skipping 'undel'" else echo "x - extracting undel (Text)" sed 's/^X//' << 'SHAR_EOF' > undel && X#!/bin/sh X# X# undel - recover "deleted" files X# X# By David Skoll - 21 November 1990 X Xif [ "$*" = "" ] ; then X echo "Usage: undel filename1 [filename2...]" X echo "Recovers files 'deleted' with delete. Type either the" X echo "original filename, or the filename with '.#' added." X exit Xfi X Xfor arg in $* Xdo X file=`echo $arg | sed -e "s/^\.#//"` X if [ ! -f .#$file ] X then X echo "Deleted version of $file not found." X elif [ ! -f $file ] X then X mv .#$file $file X echo "$file recovered." X else X echo "Undeleted verion of $file exists already - retrieving as $file.X" X mv .#$file $file.X X fi Xdone SHAR_EOF $TOUCH -am 1130122190 undel && chmod 0755 undel || echo "restore of undel failed" set `wc -c undel`;Wc_c=$1 if test "$Wc_c" != "638"; then echo original size 638, current size $Wc_c fi fi # ============= lsdel ============== if test X"$1" != X"-c" -a -f 'lsdel'; then echo "File already exists: skipping 'lsdel'" else echo "x - extracting lsdel (Text)" sed 's/^X//' << 'SHAR_EOF' > lsdel && X#!/bin/sh X# X# lsdel - list deleted files X# X# By David Skoll - 21 November 1990 X# X Xfiles=`echo .#*` X Xif [ "$files" != "" ] Xthen X ls .#* Xelse X echo "No deleted files." Xfi SHAR_EOF $TOUCH -am 1122141790 lsdel && chmod 0755 lsdel || echo "restore of lsdel failed" set `wc -c lsdel`;Wc_c=$1 if test "$Wc_c" != "172"; then echo original size 172, current size $Wc_c fi fi exit 0