]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/yesterday
audio(1): replace references to juke(7) and playlistfs(7) with zuke(1) (thanks unobe)
[plan9front.git] / rc / bin / yesterday
1 #!/bin/rc
2
3 rfork e
4
5
6 smon='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
19 fn usage {
20         echo 'usage: yesterday [-abcCdDs] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2]
21         exit 'usage'
22 }
23
24 fn Xcp {
25         echo cp $1 $2
26         cp $1 $2
27 }
28
29 fn Xdiff {
30         echo diff $1 $2
31         diff $1 $2
32 }
33 fn Xdiffn {
34         echo diff -n $1 $2
35         diff -n $1 $2
36 }
37 fn Xadiff {
38         echo /acme/bin/adiff $1 $2
39         /acme/bin/adiff $1 $2
40 }
41
42 fn Xcarefulcp {
43         if(! cmp -s $1 $2) Xcp $1 $2
44 }
45
46 fn Xecho {
47         echo $1
48 }
49
50 fn Xbind {
51         echo bind $1 $2
52         bind $1 $2
53 }
54
55 year=`{date|sed 's/.* //'}
56 copy=Xecho
57 last=()
58 defdump=dump
59 while(! ~ $#* 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 }
115 if(! ~ $#* 0 && ~ $1 --)
116         shift
117
118 if(~ $#* 0)
119         usage
120
121 dir=`{pwd}
122 if(! ~ $status ''){
123         echo 'yesterday: can''t find directory' >[1=2]
124         exit 'pwd failed'
125 }
126
127 for(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 }
157 exit ''