yesterday 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/bin/rc
  2. rfork e
  3. if(! test -e /n/dump/1997)
  4. 9fs dump
  5. smon='s/Jan/01/
  6. s/Feb/02/
  7. s/Mar/03/
  8. s/Apr/04/
  9. s/May/05/
  10. s/Jun/06/
  11. s/Jul/07/
  12. s/Aug/08/
  13. s/Sep/09/
  14. s/Oct/10/
  15. s/Nov/11/
  16. s/Dec/12/'
  17. fn usage {
  18. echo 'usage: yesterday [-abcCdD] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2]
  19. exit 'usage'
  20. }
  21. fn Xcp {
  22. echo cp $1 $2
  23. cp $1 $2
  24. }
  25. fn Xdiff {
  26. echo diff $1 $2
  27. diff $1 $2
  28. }
  29. fn Xdiffn {
  30. echo diff -n $1 $2
  31. diff -n $1 $2
  32. }
  33. fn Xadiff {
  34. echo /acme/bin/adiff $1 $2
  35. /acme/bin/adiff $1 $2
  36. }
  37. fn Xcarefulcp {
  38. if(! cmp -s $1 $2) Xcp $1 $2
  39. }
  40. fn Xecho {
  41. echo $1
  42. }
  43. fn Xbind {
  44. echo bind $1 $2
  45. bind $1 $2
  46. }
  47. year=`{date|sed 's/.* //'}
  48. copy=Xecho
  49. last=()
  50. while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
  51. switch($1){
  52. case -a
  53. copy=Xadiff
  54. shift
  55. case -b
  56. copy=Xbind
  57. shift
  58. case -c
  59. copy=Xcp
  60. shift
  61. case -d
  62. copy=Xdiff
  63. shift
  64. case -D
  65. copy=Xdiffn
  66. shift
  67. case -C
  68. copy=Xcarefulcp
  69. shift
  70. case -n*
  71. if(~ $1 -n){
  72. if(~ $#* 1)
  73. usage
  74. shift
  75. days=$1
  76. }
  77. if not
  78. days=`{echo $1 | sed 's/^-.//'}
  79. last=`{date `{hoc -e `{date -n} ^ '-'$days'*60*60*24'} | \
  80. sed -e 's%... (...) (..) ..:..:.. ... (....)%/n/dump/\3/\1\2%' -e 'y/ /0/' -e $smon}
  81. shift
  82. case -?
  83. mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
  84. last=/n/dump/$year/$mon ^`{echo $1|sed 's/^-/0/'}
  85. shift
  86. case -??
  87. mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
  88. last=/n/dump/$year/$mon ^`{echo $1|sed 's/^-//'}
  89. shift
  90. case -????
  91. last=/n/dump/$year/ ^ `{echo $1|sed 's/^-//'}
  92. shift
  93. case -??????
  94. last=/n/dump/ ^ `{echo $year|sed 's/..$//'} ^ `{echo $1|sed 's/^-(..)/\1\//'}
  95. shift
  96. case -????????
  97. last=/n/dump/ ^ `{echo $1|sed 's/^-(....)/\1\//'}
  98. shift
  99. case *
  100. usage
  101. }
  102. }
  103. if(! ~ $#* 0 && ~ $1 --)
  104. shift
  105. if(~ $#* 0)
  106. usage
  107. if(~ $#last 0)
  108. last=`{ls -t /n/dump/$year|sed 1q}
  109. if(! test -e $last){
  110. echo 'yesterday:' \
  111. `{echo $last|sed 's/.n.dump.(....).(..)(..)/\1 \2 \3/'} \
  112. 'is not a backup day' >[1=2]
  113. exit 'bad date'
  114. }
  115. dir=`{pwd}
  116. if(! ~ $status ''){
  117. echo 'yesterday: can''t find directory' >[1=2]
  118. exit 'pwd failed'
  119. }
  120. for(i){
  121. $copy $last^`{cleanname -d $dir -- $i} $i
  122. }
  123. exit ''