home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume2 / can-v2 < prev    next >
Internet Message Format  |  1991-08-07  |  7KB

  1. From: athey@cod.nosc.mil (The Bit Butcher)
  2. Newsgroups: comp.sources.misc
  3. Subject: v02i049: Can - better and a definite replacement
  4. Message-ID: <7217@ncoast.UUCP>
  5. Date: 11 Feb 88 00:40:50 GMT
  6. Approved: allbery@ncoast.UUCP
  7.  
  8. Comp.sources.misc: Volume 2, Issue 49
  9. Submitted-By: "The Bit Butcher" <athey@cod.nosc.mil>
  10. Archive-Name: can-v2
  11.  
  12. [The bug he *didn't* fix concerns files with the same basename... not to
  13. mention links (especially across devices), etc.  ++bsa]
  14.  
  15. I put this thing called "can" out on the net just recently and
  16. soon thereafter I discovered a horrid error so if you grabbed it 
  17. (or you missed it) you better get this one because this one lacks that
  18. very error I just spoke of.  The error was that it worked recursively even
  19. when you didn't want it to.  Kind of a dumb mistake, but that was a result
  20. of not examining test results very closely.  I saw the directories
  21. weren't gone but forgot to look for the files which were gone.
  22.  
  23. Sorry to bore you with such digression, but if you were interested...
  24. Here it is all over again complete with man pages.
  25.  
  26. If you missed the first posting, this is a great replacement for
  27. rm because with a simple alias ("alias rm can") things are removed to
  28. a directory in your home called ".trashcan" which is cleaned of files
  29. that are more than a week old by your system manager installing 
  30. "emptytrash" (also included with man page) 
  31. into the proper crontab file ("root").
  32.  
  33.                 -the bit butcher
  34.  
  35.  
  36. ----------------------------cut it off and let it bleed ------------
  37. #!/bin/sh
  38. # to extract, remove the header and type "sh filename"
  39. if `test ! -s ./ReadMe`
  40. then
  41. echo "writing ./ReadMe"
  42. cat > ./ReadMe << '\end\file\'
  43. How to get CANned and still keep your job!!!
  44.  
  45. Yes, this is what you have all been waiting for or may
  46. already have.  A replacement for the overpowering "rm."
  47. If you are a system manager who is constantly having
  48. to deal with those users who fail to use "rm" correctly
  49. and destroy weeks of work, this just may be the ticket
  50. for your next meal.  If you are a frustrated user of
  51. "rm" simply talk to your system manager and show him
  52. this nifty stuff.  
  53.  
  54. I have done my best to make this a nearly complete package
  55. with man pages and all.  I do hope that you enjoy it.
  56. Now, you may be a bit more of a wizard with shell
  57. scripts so don't laugh too hard at my simpleton
  58. implementation.  In the emptytrash script, you will
  59. need to change it so that it looks for the appropriate
  60. trashcan files in the appropriate directories.
  61. In other words, you need to change it so that the
  62. location of the users directories is searched.
  63.  
  64. I only have a system V to test this on.  But from my vast
  65. (which isn't extreme, but does include sun3.4 and bsd4.3)
  66. this should be fairly mobile from machine to machine.
  67. I tried not to use to many system dependent things.
  68. You must think I am crazy, well ...
  69.  
  70. If you have any complaints or want to tell me that
  71. I am a complete fool, I will not object, just
  72. write me at nosc!athey.
  73.         -the bit butcher
  74.  
  75. \end\file\
  76. else
  77.   echo "will not over write ./ReadMe"
  78. fi
  79. if `test ! -s ./can`
  80. then
  81. echo "writing ./can"
  82. cat > ./can << '\end\file\'
  83. :
  84. # @(#) can v1.0  Maintain file trash can    Author:  Russ Sage
  85. # installed on MassComp by S. Luse 4/2/87
  86. # Rewritten by The Bit Butcher
  87.  
  88. CAN=$HOME/.trashcan
  89. USAGE="usage: can [lRr] file ..."
  90.  
  91. if [ ! -d $CAN ] 
  92.     then mkdir $CAN
  93. fi
  94.  
  95. set -- `getopt lR:r: $*`
  96.  
  97. if [ $? != 0 ]
  98. then
  99.     echo "$USAGE" >&2
  100.     exit 2
  101. fi
  102. for i in $*
  103. do
  104.     case $i in
  105.     -l)    echo "$CAN"
  106.         ls $CAN
  107.          exit 0;;
  108.     -R) for j in $@
  109.         do
  110.             case $j in
  111.             -*) ;;
  112.             *)    if [ -f $CAN/$j ]
  113.                 then
  114.                     cp $CAN/$j `pwd`
  115.                     echo "Recovered $j"
  116.                 else
  117.                     echo "$CAN/$j Not Found"
  118.                 fi;;
  119.             esac
  120.         done
  121.         exit 0;;
  122.     -r)    for j in $@
  123.         do
  124.             case $j in
  125.             -*)    ;;
  126.             *)    find $j -print | sort -r | while read FILE
  127.                 do
  128.                     if [ ! -d $FILE ]
  129.                     then 
  130.                         touch -c -a $FILE 
  131.                         mv $FILE $CAN
  132.                     else
  133.                         rmdir $FILE
  134.                     fi
  135.                 done
  136.             esac
  137.         done
  138.         exit 0;;
  139.     --) shift; break;;
  140.     esac
  141. done
  142.  
  143. if  [ -f $@ -o -d $@ ]
  144. then
  145.     ls -d $@ | while read FILE
  146.     do
  147.         if [ ! -d $FILE ]
  148.         then 
  149.             touch -c -a $FILE 
  150.             mv $FILE $CAN
  151.         else
  152.             echo "can: $FILE directory"
  153.         fi
  154.     done
  155. else
  156.     echo "$USAGE" >&2
  157.     exit 2
  158. fi
  159. \end\file\
  160. else
  161.   echo "will not over write ./can"
  162. fi
  163. if `test ! -s ./can.1`
  164. then
  165. echo "writing ./can.1"
  166. cat > ./can.1 << '\end\file\'
  167. .\" @(#)run.1    10.2 (MASSCOMP) 8/14/86
  168. .RL "local"
  169. .TH CAN 1
  170. .SH NAME
  171. can \- a replacement for rm that is safe
  172. .SH SYNOPSIS
  173. \fB can [ lRr ] <file | directory> ...
  174. .br
  175. .ns
  176. .SH DESCRIPTION
  177. .I Can
  178. is often an alias of
  179. .I rm(1).
  180. .I Can
  181. works similiarly, with the exception of putting things into a directory, in
  182. your home directory, called ".trashcan."
  183. The
  184. .B -l
  185. option will give you a listing of the "$HOME/.trashcan"
  186. directory.
  187. The
  188. .B -r
  189. option works recursively just the same as 
  190. .I rm(1).
  191. The 
  192. .B -R
  193. option will retrieve a file from the "$HOME/.trashcan" without the hassle
  194. of looking for it.  The
  195. .B -R
  196. option copies the file from the "$HOME/.trashcan" directory into the
  197. present working directory.
  198. .sp
  199. The trash gets dumped everyday but only gets rid of things that
  200. are more than a week old.  In other words, you have a week to get something
  201. back after you have
  202. .I can
  203. ned it.
  204. .SH FILES
  205. .TP 2.5i
  206. $HOME/.trashcan
  207. The reservoir of canned files
  208. .SH SEE ALSO
  209. .I
  210. emptytrash(8), rm(1)
  211. .SH BUGS
  212. The 
  213. .B -R
  214. option does not work on wild cards.  You have to know the
  215. exact name of a file in order to recover it with this command.
  216. .sp
  217. If further bugs are found please report them.
  218. .SH AUTHOR
  219. The Bit Butcher
  220. .br
  221. Inspired by the original
  222. .B can
  223. made available by Steph Luse, which he pirated from COD, which was written
  224. by a Russ Sage.
  225. \end\file\
  226. else
  227.   echo "will not over write ./can.1"
  228. fi
  229. if `test ! -s ./emptytrash`
  230. then
  231. echo "writing ./emptytrash"
  232. cat > ./emptytrash << '\end\file\'
  233. : /bin/sh
  234.  
  235. # EMPTYTRASH 
  236. # Executed from root crontab file every night.
  237. # It finds all files in all users .traschan directories and gets
  238. # rid of any file that has not been accessed or modified for more
  239. # than 7 days.  Note:  this works in conjunction with can.  can
  240. # changes modifies the access time for a file when it moves the  
  241. # file to the user's .trashcan diretory.
  242.  
  243. find /cd441/*/.trashcan -atime +7 -print | while read FILE
  244. do 
  245. #       echo $FILE
  246.     rm $FILE
  247. done
  248. \end\file\
  249. else
  250.   echo "will not over write ./emptytrash"
  251. fi
  252. if `test ! -s ./emptytrash.8`
  253. then
  254. echo "writing ./emptytrash.8"
  255. cat > ./emptytrash.8 << '\end\file\'
  256. .\" @(#)run.1    10.2 (MASSCOMP) 8/14/86
  257. .RL "local"
  258. .TH EMPTYTRASH 8
  259. .SH NAME
  260. emptytrash \- the trash collector used with
  261. .I can
  262. .SH SYNOPSIS
  263. \fBemptytrash
  264. .br
  265. .ns
  266. .SH DESCRIPTION
  267. .I Emptytrash
  268. simply looks into each $HOME/.trashcan and checks the last access time
  269. which is usually set by
  270. .I can(1).
  271. Anything that it finds that is more than seven days old it permanently
  272. removes via 
  273. .I rm(1).
  274. This amount of time can be changed by changing the "7" in the script file.
  275. The best thing to do is to put this in your root crontab file and have it
  276. executed everyday.
  277. .SH FILES
  278. .TP 2.5i
  279. $HOME/.trashcan
  280. The reservoir of canned files
  281. .SH SEE ALSO
  282. .I
  283. can(1), rm(1)
  284. .SH BUGS
  285. Only that this was a quicky and could be made better by having it accept an
  286. argument that would determine the amount of elapsed time to check for.
  287. .SH AUTHOR
  288. The Bit Butcher
  289. .br
  290. With the help of Steph Luse.
  291. \end\file\
  292. else
  293.   echo "will not over write ./emptytrash.8"
  294. fi
  295. echo "Finished archive 1 of 1"
  296. exit
  297.