annotate src/ut/lu/lu.go @ 61:49656dc40069

add qtuti.
author pyon@macmini
date Fri, 11 Sep 2020 20:06:27 +0900
parents 4232b4cbeeb5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
1 /*
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
2 little unix tool library.
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
3 */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
4 package lu
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
5
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
6 import (
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
7 "archive/tar"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
8 "bufio"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
9 "bytes"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
10 "compress/gzip"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
11 "crypto/md5"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
12 "crypto/sha256"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
13 "fmt"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
14 "io"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
15 "log"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
16 "os"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
17 "os/exec"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
18 "path/filepath"
18
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
19 "regexp"
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
20 "strings"
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
21 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
22
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
23 func CmdTime( cmdline string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
24 cmd := exec.Command( "ls", "-l" )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
25 cmd.Stdin = strings.NewReader( "some input" )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
26 var out bytes.Buffer
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
27 cmd.Stdout = &out
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
28 err := cmd.Run()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
29 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
30 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
31 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
32 fmt.Printf( "%q\n", out.String() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
33 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
34
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
35 /* cut -d, -f: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
36 func CutCsv( files []string, cols []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
37 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
38
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
39 /* cat -n: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
40 func Cat_n( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
41 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
42 cnt := 1
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
43 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
44 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
45 fmt.Printf( "%5d %s\n", cnt, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
46 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
47 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
48 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
49 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
50 cnt := 1
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
51 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
52 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
53 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
54 fmt.Printf( "%5d %s\n", cnt, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
55 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
56 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
57 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
58 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
59 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
60 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
61
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
62 /* wc -l: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
63 func Wc_l( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
64 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
65 cnt := 0
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
66 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
67 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
68 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
69 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
70 fmt.Printf( "%d\n", cnt )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
71 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
72 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
73 cnt := 0
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
74 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
75 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
76 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
77 cnt++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
78 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
79 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
80 fmt.Printf( "%s:\t%5d\n", file, cnt )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
81 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
82 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
83 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
84
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
85 /* tar cvfz: done. */
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
86 func Tgz( tgzfile string, files []string ) {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
87
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
88 tgz, err := os.Create( tgzfile )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
89 if err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
90 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
91 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
92 defer tgz.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
93
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
94 gw := gzip.NewWriter( tgz )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
95 defer gw.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
96 tw := tar.NewWriter( gw )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
97 defer tw.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
98
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
99 for _, file := range fullpath( files ) {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
100 f, err := os.Open( file )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
101 if err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
102 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
103 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
104
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
105 stat, _ := f.Stat()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
106 header := new( tar.Header )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
107 header.Name = file
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
108 header.Size = stat.Size()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
109 header.Mode = int64( stat.Mode() )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
110 header.ModTime = stat.ModTime()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
111
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
112 if err := tw.WriteHeader( header ); err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
113 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
114 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
115 if _, err := io.Copy( tw, f ); err != nil {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
116 log.Fatal( err )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
117 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
118 f.Close()
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
119 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
120 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
121
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
122 /* tar xvfz: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
123 func UnTgz( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
124
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
125 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
126
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
127 f, err := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
128 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
129 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
130 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
131 zr, err := gzip.NewReader( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
132 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
133 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
134 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
135
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
136 tr := tar.NewReader( zr )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
137
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
138 for {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
139 hdr, err := tr.Next()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
140 if err == io.EOF {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
141 break // End of archive
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
142 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
143 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
144 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
145 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
146 fmt.Printf( "%s\n", hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
147
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
148 dir := filepath.Dir( hdr.Name )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
149 if ( dir != "" ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
150 os.MkdirAll( dir, 0744 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
151 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
152 f, err := os.OpenFile( hdr.Name, os.O_RDWR|os.O_CREATE, 0644 )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
153 if err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
154 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
155 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
156 if _, err := io.Copy( f, tr ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
157 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
158 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
159
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
160 if err := f.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
161 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
162 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
163 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
164
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
165 if err := zr.Close(); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
166 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
167 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
168 }
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
169 }
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
170
17
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
171 func fullpath( files []string ) []string {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
172 var buf []string
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
173 for _, f := range files {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
174 fi, _ := os.Stat( f )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
175 if fi.IsDir() {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
176 filepath.Walk( f, func( path string, info os.FileInfo, err error ) error {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
177 if !info.IsDir() {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
178 buf = append( buf, path )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
179 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
180 return nil
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
181 } )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
182 } else {
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
183 buf = append( buf, f )
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
184 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
185 }
72ce457fb99d ut: bug fix.
pyon@macmini
parents: 16
diff changeset
186 return buf
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
187 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
188
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
189 /* tac: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
190 func Reverse( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
191 var buf []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
192 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
193 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
194 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
195 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
196 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
197 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
198 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
199 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
200 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
201 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
202 buf = append( buf, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
203 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
204 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
205 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
206 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
207 for i := len( buf ); i > 0; i-- {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
208 fmt.Println( buf[i-1] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
209 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
210 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
211
18
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
212 /* grep: done. */
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
213 func Grep( word string, inv bool, files []string ) {
18
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
214 regex, err := regexp.Compile( word )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
215 if err != nil {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
216 log.Fatal( err )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
217 }
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
218 if len( files ) == 0 {
18
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
219 grep( regex, inv, os.Stdin )
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
220 } else {
18
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
221 for _, file := range files {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
222 f, _ := os.Open( file )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
223 grep( regex, inv, f )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
224 f.Close()
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
225 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
226 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
227 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
228
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
229 func grep( regex *regexp.Regexp, inv bool, r io.Reader ) {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
230 input := bufio.NewScanner( r )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
231 for input.Scan() {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
232 if regex.MatchString( input.Text() ) && !inv {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
233 fmt.Println( input.Text() )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
234 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
235 if !regex.MatchString( input.Text() ) && inv {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
236 fmt.Println( input.Text() )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
237 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
238 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
239 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
240
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
241 /* orgrep: done. */
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
242 func OrGrep( lfile string, inv bool, files []string ) {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
243 var keywords []regexp.Regexp
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
244 f, _ := os.Open( lfile )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
245 input := bufio.NewScanner( f )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
246 for input.Scan() {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
247 regex, err := regexp.Compile( input.Text() )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
248 if err != nil {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
249 log.Fatal( err )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
250 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
251 keywords = append( keywords, *regex )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
252 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
253 f.Close()
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
254
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
255 if len( files ) == 0 {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
256 orgrep( keywords, inv, os.Stdin )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
257 } else {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
258 for _, file := range files {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
259 f, _ := os.Open( file )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
260 orgrep( keywords, inv, f )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
261 f.Close()
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
262 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
263 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
264 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
265
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
266 func orgrep( keywords []regexp.Regexp, inv bool, r io.Reader ) {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
267 input := bufio.NewScanner( r )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
268 seen := make( map[string]bool )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
269 for input.Scan() {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
270 for _, r := range keywords {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
271 if r.MatchString( input.Text() ) {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
272 seen[ input.Text() ] = true
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
273 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
274 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
275 if !inv && seen[ input.Text() ] {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
276 fmt.Println( input.Text() )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
277 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
278 if inv && !seen[ input.Text() ] {
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
279 fmt.Println( input.Text() )
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
280 }
45ca03520eea ut: add grep.
pyon@macmini
parents: 17
diff changeset
281 seen[ input.Text() ] = false
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
282 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
283 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
284
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
285 /* uniq: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
286 func Uniq( cnt, dup bool, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
287 var lines []string
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
288 lcnt := make( map[string]int )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
289 lpnt := make( map[string]bool )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
290
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
291 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
292 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
293 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
294 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
295 lcnt[ input.Text() ]++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
296 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
297 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
298 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
299 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
300 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
301 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
302 lines = append( lines, input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
303 lcnt[ input.Text() ]++
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
304 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
305 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
306 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
307 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
308
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
309 for _, line := range lines {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
310 if !lpnt[ line ] {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
311 if dup && lcnt[ line ] == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
312 continue
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
313 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
314 if cnt {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
315 fmt.Printf( "%5d ,", lcnt[ line ] )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
316 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
317 fmt.Printf( "%s\n", line )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
318 lpnt[ line ] = true
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
319 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
320 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
321 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
322
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
323 func Head( n int, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
324 if n > 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
325 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
326 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
327 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
328 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
329 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
330 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
331 return
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
332 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
333 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
334 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
335 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
336 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
337 return
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
338 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
339 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
340 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
341 for input.Scan() {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
342 fmt.Println( input.Text() )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
343 n--
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
344 if n == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
345 break
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
346 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
347 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
348 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
349 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
350 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
351 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
352 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
353
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
354 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
355
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
356 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
357 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
358 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
359
21
4232b4cbeeb5 ul: add replace.
pyon@macmini
parents: 19
diff changeset
360 /* replace: done. */
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
361 func Replace( s, t string, files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
362 if len( files ) == 0 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
363 input := bufio.NewScanner( os.Stdin )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
364 for input.Scan() {
21
4232b4cbeeb5 ul: add replace.
pyon@macmini
parents: 19
diff changeset
365 str := strings.Replace( input.Text(), s, t, -1 )
4232b4cbeeb5 ul: add replace.
pyon@macmini
parents: 19
diff changeset
366 fmt.Println( str )
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
367 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
368 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
369 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
370 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
371 input := bufio.NewScanner( f )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
372 for input.Scan() {
21
4232b4cbeeb5 ul: add replace.
pyon@macmini
parents: 19
diff changeset
373 str := strings.Replace( input.Text(), s, t, -1 )
4232b4cbeeb5 ul: add replace.
pyon@macmini
parents: 19
diff changeset
374 fmt.Println( str )
16
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
375 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
376 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
377 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
378 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
379 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
380
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
381 /* touch: */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
382 func Touch( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
383 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
384 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
385 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
386 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
387 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
388
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
389 /* md5: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
390 func Md5( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
391 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
392 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
393 h := md5.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
394 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
395 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
396 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
397 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
398 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
399 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
400 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
401 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
402 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
403 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
404 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
405
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
406 /* sha256: done. */
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
407 func Sha256( files []string ) {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
408 for _, file := range files {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
409 f, _ := os.Open( file )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
410 h := sha256.New()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
411 if _, err := io.Copy( h, f ); err != nil {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
412 log.Fatal( err )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
413 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
414 f.Close()
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
415 if len( files ) == 1 {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
416 fmt.Printf( "%x\n", h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
417 } else {
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
418 fmt.Printf( "%s:\t%x\n", file, h.Sum( nil ) )
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
419 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
420 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
421 }
38b64afbaf79 add ut. ( unix-like tools )
pyon@macmini
parents:
diff changeset
422
19
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
423 /* tee: done. */
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
424 func Tee( file string ) {
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
425 if _, err := os.Stat( file ); !os.IsNotExist( err ) {
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
426 if err := os.Remove( file ); err != nil {
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
427 log.Fatal( err )
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
428 }
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
429 }
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
430 f, err := os.OpenFile( file, os.O_RDWR|os.O_CREATE, 0644 )
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
431 if err != nil {
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
432 log.Fatal( err )
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
433 }
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
434 defer f.Close()
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
435
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
436 w := io.MultiWriter( f, os.Stdout )
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
437 if _, err := io.Copy( w, os.Stdin ); err != nil {
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
438 log.Fatal( err )
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
439 }
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
440 }
8008046c8d76 ut: add tee.
pyon@macmini
parents: 18
diff changeset
441