rsc | 17e662e | 2005-07-13 04:02:10 +0000 | [diff] [blame] | 1 | #!/usr/local/plan9/bin/rc |
| 2 | |
| 3 | path=($path $PLAN9/bin) |
| 4 | |
| 5 | fn usage { |
| 6 | echo 'usage: yesterday [-cd] [-[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2] |
| 7 | exit 1 |
| 8 | } |
| 9 | |
| 10 | fn Xcp { |
| 11 | echo cp $1 $2 |
| 12 | cp $1 $2 |
| 13 | } |
| 14 | |
| 15 | fn Xcarefulcp { |
| 16 | if(! cmp -s $1 $2) Xcp $1 $2 |
| 17 | } |
| 18 | |
| 19 | fn Xdiff { |
| 20 | echo diff -c $1 $2 |
| 21 | diff -c $1 $2 |
| 22 | } |
| 23 | |
| 24 | fn Xecho { |
| 25 | echo $1 |
| 26 | } |
| 27 | |
| 28 | year=`{date|sed 's/.* //'} |
| 29 | copy=Xecho |
| 30 | last=() |
| 31 | while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){ |
| 32 | switch($1){ |
| 33 | case -c |
| 34 | copy=Xcp |
| 35 | shift |
| 36 | case -d |
| 37 | copy=Xdiff |
| 38 | shift |
| 39 | case -C |
| 40 | copy=Xcarefulcp |
| 41 | shift |
| 42 | case -n* |
| 43 | if(~ $1 -n){ |
| 44 | if(~ $#* 1) |
| 45 | usage |
| 46 | shift |
| 47 | days=$1 |
| 48 | } |
| 49 | if not |
| 50 | days=`{echo $1 | sed 's/^-.//'} |
| 51 | last=`{date -r `{perl -e 'print time() - '$days'*60*60*24'} | |
| 52 | 9 sed -e 's%... (...) (..) ..:..:.. ... (....)%\3/\1\2%' -e 'y/ /0/' -e $smon} |
| 53 | shift |
| 54 | case -[0-9] |
| 55 | mon=`{date|9 sed 's/^....(...).*/\1/' -e $smon} |
| 56 | last=$year/$mon ^`{echo $1|sed 's/^-/0/'} |
| 57 | shift |
| 58 | case -[0-9][0-9] |
| 59 | mon=`{date|9 sed 's/^....(...).*/\1/' -e $smon} |
| 60 | last=$year/$mon ^`{echo $1|9 sed 's/^-//'} |
| 61 | shift |
| 62 | case -[0-9][0-9][0-9][0-9] |
| 63 | last=$year/ ^ `{echo $1|9 sed 's/^-//'} |
| 64 | shift |
| 65 | case -[0-9][0-9][0-9][0-9][0-9][0-9] |
| 66 | last=`{echo $year|9 sed 's/..$//'} ^ `{echo $1|9 sed 's/^-(..)/\1\//'} |
| 67 | shift |
| 68 | case -[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] |
| 69 | last=`{echo $1|9 sed 's/^-(....)/\1\//'} |
| 70 | shift |
| 71 | case * |
| 72 | usage |
| 73 | } |
| 74 | } |
| 75 | if(! ~ $#* 0 && ~ $1 --) |
| 76 | shift |
| 77 | |
| 78 | if(~ $#* 0) |
| 79 | usage |
| 80 | |
| 81 | dir=`{pwd} |
| 82 | if(! ~ $status ''){ |
| 83 | echo 'yesterday: can''t find directory' >[1=2] |
| 84 | exit 'pwd failed' |
| 85 | } |
| 86 | |
| 87 | h=`{hostname} |
| 88 | switch($h){ |
| 89 | case amsterdam |
| 90 | xdump=/dump/am |
| 91 | case * |
| 92 | if(! test -d /dump/$h){ |
| 93 | echo 'no dumps on '^`{hostname} >[1=2] |
| 94 | exit 1 |
| 95 | } |
| 96 | xdump=/dump/$h |
| 97 | } |
| 98 | |
| 99 | for(i){ |
| 100 | xpath=$i |
| 101 | if(! ~ $xpath /*) |
| 102 | xpath=`{9 cleanname -d `{pwd} $i} |
| 103 | dumppath=$xpath |
| 104 | if(~ $#last 0) |
| 105 | xlast=`{9 ls -t $xdump/$year|sed 1q} |
| 106 | if not |
| 107 | xlast=$xdump/$last |
| 108 | $copy $xlast^$dumppath $xpath |
| 109 | } |