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