13e12c5d1SDavid du Colombier#!/bin/rc 27dd7cddfSDavid du Colombier 37dd7cddfSDavid du Colombierrfork e 4f8e525acSDavid du Colombier 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombiersmon='s/Jan/01/ 77dd7cddfSDavid du Colombier s/Feb/02/ 87dd7cddfSDavid du Colombier s/Mar/03/ 97dd7cddfSDavid du Colombier s/Apr/04/ 107dd7cddfSDavid du Colombier s/May/05/ 117dd7cddfSDavid du Colombier s/Jun/06/ 127dd7cddfSDavid du Colombier s/Jul/07/ 137dd7cddfSDavid du Colombier s/Aug/08/ 147dd7cddfSDavid du Colombier s/Sep/09/ 157dd7cddfSDavid du Colombier s/Oct/10/ 167dd7cddfSDavid du Colombier s/Nov/11/ 177dd7cddfSDavid du Colombier s/Dec/12/' 183e12c5d1SDavid du Colombier 193e12c5d1SDavid du Colombierfn usage { 202eaa3c3aSDavid du Colombier echo 'usage: yesterday [-abcCdDs] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2] 213e12c5d1SDavid du Colombier exit 'usage' 223e12c5d1SDavid du Colombier} 233e12c5d1SDavid du Colombier 247dd7cddfSDavid du Colombierfn Xcp { 257dd7cddfSDavid du Colombier echo cp $1 $2 267dd7cddfSDavid du Colombier cp $1 $2 273e12c5d1SDavid du Colombier} 287dd7cddfSDavid du Colombier 297dd7cddfSDavid du Colombierfn Xdiff { 30*41fe996aSDavid du Colombier echo diff $1 $2 31*41fe996aSDavid du Colombier diff $1 $2 327dd7cddfSDavid du Colombier} 337dd7cddfSDavid du Colombierfn Xdiffn { 347dd7cddfSDavid du Colombier echo diff -n $1 $2 357dd7cddfSDavid du Colombier diff -n $1 $2 367dd7cddfSDavid du Colombier} 377dd7cddfSDavid du Colombierfn Xadiff { 387dd7cddfSDavid du Colombier echo /acme/bin/adiff $1 $2 397dd7cddfSDavid du Colombier /acme/bin/adiff $1 $2 407dd7cddfSDavid du Colombier} 417dd7cddfSDavid du Colombier 427dd7cddfSDavid du Colombierfn Xcarefulcp { 437dd7cddfSDavid du Colombier if(! cmp -s $1 $2) Xcp $1 $2 447dd7cddfSDavid du Colombier} 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombierfn Xecho { 477dd7cddfSDavid du Colombier echo $1 487dd7cddfSDavid du Colombier} 497dd7cddfSDavid du Colombier 507dd7cddfSDavid du Colombierfn Xbind { 517dd7cddfSDavid du Colombier echo bind $1 $2 527dd7cddfSDavid du Colombier bind $1 $2 537dd7cddfSDavid du Colombier} 547dd7cddfSDavid du Colombier 557dd7cddfSDavid du Colombieryear=`{date|sed 's/.* //'} 567dd7cddfSDavid du Colombiercopy=Xecho 577dd7cddfSDavid du Colombierlast=() 5840ef9009SDavid du Colombierdefdump=dump 597dd7cddfSDavid du Colombierwhile(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){ 603e12c5d1SDavid du Colombier switch($1){ 617dd7cddfSDavid du Colombier case -a 627dd7cddfSDavid du Colombier copy=Xadiff 637dd7cddfSDavid du Colombier shift 647dd7cddfSDavid du Colombier case -b 657dd7cddfSDavid du Colombier copy=Xbind 667dd7cddfSDavid du Colombier shift 677dd7cddfSDavid du Colombier case -c 687dd7cddfSDavid du Colombier copy=Xcp 697dd7cddfSDavid du Colombier shift 707dd7cddfSDavid du Colombier case -d 717dd7cddfSDavid du Colombier copy=Xdiff 727dd7cddfSDavid du Colombier shift 737dd7cddfSDavid du Colombier case -D 747dd7cddfSDavid du Colombier copy=Xdiffn 757dd7cddfSDavid du Colombier shift 767dd7cddfSDavid du Colombier case -C 777dd7cddfSDavid du Colombier copy=Xcarefulcp 787dd7cddfSDavid du Colombier shift 7940ef9009SDavid du Colombier case -s 8040ef9009SDavid du Colombier defdump=snap 8140ef9009SDavid du Colombier shift 827dd7cddfSDavid du Colombier case -n* 837dd7cddfSDavid du Colombier if(~ $1 -n){ 847dd7cddfSDavid du Colombier if(~ $#* 1) 857dd7cddfSDavid du Colombier usage 867dd7cddfSDavid du Colombier shift 877dd7cddfSDavid du Colombier days=$1 887dd7cddfSDavid du Colombier } 897dd7cddfSDavid du Colombier if not 907dd7cddfSDavid du Colombier days=`{echo $1 | sed 's/^-.//'} 917dd7cddfSDavid du Colombier last=`{date `{hoc -e `{date -n} ^ '-'$days'*60*60*24'} | \ 92f8e525acSDavid du Colombier sed -e 's%... (...) (..) ..:..:.. ... (....)%\3/\1\2%' -e 'y/ /0/' -e $smon} 937dd7cddfSDavid du Colombier shift 94219b2ee8SDavid du Colombier case -? 957dd7cddfSDavid du Colombier mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon} 96f8e525acSDavid du Colombier last=$year/$mon ^`{echo $1|sed 's/^-/0/'} 97219b2ee8SDavid du Colombier shift 983e12c5d1SDavid du Colombier case -?? 997dd7cddfSDavid du Colombier mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon} 100f8e525acSDavid du Colombier last=$year/$mon ^`{echo $1|sed 's/^-//'} 1013e12c5d1SDavid du Colombier shift 1023e12c5d1SDavid du Colombier case -???? 103f8e525acSDavid du Colombier last=$year/ ^ `{echo $1|sed 's/^-//'} 1043e12c5d1SDavid du Colombier shift 1053e12c5d1SDavid du Colombier case -?????? 106f8e525acSDavid du Colombier last=`{echo $year|sed 's/..$//'} ^ `{echo $1|sed 's/^-(..)/\1\//'} 1073e12c5d1SDavid du Colombier shift 1083e12c5d1SDavid du Colombier case -???????? 109f8e525acSDavid du Colombier last=`{echo $1|sed 's/^-(....)/\1\//'} 1103e12c5d1SDavid du Colombier shift 1113e12c5d1SDavid du Colombier case * 1127dd7cddfSDavid du Colombier usage 1133e12c5d1SDavid du Colombier } 1147dd7cddfSDavid du Colombier} 1157dd7cddfSDavid du Colombierif(! ~ $#* 0 && ~ $1 --) 1163e12c5d1SDavid du Colombier shift 1173e12c5d1SDavid du Colombier 1183e12c5d1SDavid du Colombierif(~ $#* 0) 1193e12c5d1SDavid du Colombier usage 1203e12c5d1SDavid du Colombier 1213e12c5d1SDavid du Colombierdir=`{pwd} 1223e12c5d1SDavid du Colombierif(! ~ $status ''){ 123219b2ee8SDavid du Colombier echo 'yesterday: can''t find directory' >[1=2] 1243e12c5d1SDavid du Colombier exit 'pwd failed' 1253e12c5d1SDavid du Colombier} 1263e12c5d1SDavid du Colombier 1273e12c5d1SDavid du Colombierfor(i){ 128f8e525acSDavid du Colombier xpath=`{cleanname -d $dir -- $i} 12940ef9009SDavid du Colombier xdump=$defdump 130f8e525acSDavid du Colombier dumppath=$xpath 1312eaa3c3aSDavid du Colombier if(~ $xpath /n/*/*){ 13240ef9009SDavid du Colombier xdump=`{echo $xpath | sed 's:/n/([^/]+)/.*:\1'$defdump':'} 133f8e525acSDavid du Colombier dumppath=`{echo $xpath | sed 's:/n/[^/]+(/.*):\1:'} 134f8e525acSDavid du Colombier } 135f8e525acSDavid du Colombier if(! test -e /n/$xdump/$year) 136f8e525acSDavid du Colombier 9fs $xdump 137f8e525acSDavid du Colombier 13840ef9009SDavid du Colombier if(~ $#last 0){ 13951711cb6SDavid du Colombier xlast=`{ls /n/$xdump/$year|sed -n '$p'} 14040ef9009SDavid du Colombier switch($defdump){ 14140ef9009SDavid du Colombier case snap 14251711cb6SDavid du Colombier xlast=`{ls $xlast|sed -n '$p'} 14340ef9009SDavid du Colombier } 14440ef9009SDavid du Colombier } 145f8e525acSDavid du Colombier if not 146f8e525acSDavid du Colombier xlast=/n/$xdump/$last 147f8e525acSDavid du Colombier 148f8e525acSDavid du Colombier if(! test -e $xlast){ 149f8e525acSDavid du Colombier echo 'yesterday:' \ 15040ef9009SDavid du Colombier `{echo $xlast|sed 's/.n.'$defdump'.(....).(..)(..)/\1 \2 \3/'} \ 151f8e525acSDavid du Colombier 'is not a backup day for' $xdump >[1=2] 152f8e525acSDavid du Colombier exit 'bad date' 153f8e525acSDavid du Colombier } 154f8e525acSDavid du Colombier 155f8e525acSDavid du Colombier $copy $xlast^$dumppath $xpath 1563e12c5d1SDavid du Colombier} 1573e12c5d1SDavid du Colombierexit '' 158