Mercurial > mercurial > hgweb_rsearcher.cgi
comparison go/imgtgz.go @ 0:d3b8cd5aeb70
make repo.
author | pyon@macmini |
---|---|
date | Sun, 30 Sep 2018 17:27:04 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d3b8cd5aeb70 |
---|---|
1 /* imgtgz | |
2 [usage(1) archive images.] | |
3 $ mkdir 20170707 | |
4 $ cd 20170707 | |
5 $ ./imgtgz /mnt/nas/2017/20170702/xxxxx/0300012345 | |
6 | |
7 [usage(2) list directory.( for archive )] | |
8 $ cd /mnt/nas/2017/20170702 | |
9 $ ./imgtgz -l | |
10 */ | |
11 package main | |
12 | |
13 import ( | |
14 "archive/tar" | |
15 "compress/gzip" | |
16 "fmt" | |
17 "io" | |
18 "log" | |
19 "os" | |
20 "path/filepath" | |
21 "regexp" | |
22 "strings" | |
23 ) | |
24 | |
25 | |
26 func main() { | |
27 if len( os.Args ) == 1 { | |
28 help := ` | |
29 [usage(1) archive images.] | |
30 $ mkdir 20170707 | |
31 $ cd 20170707 | |
32 $ ./imgtgz /mnt/nas/2017/20170702/xxxxx/0300012345 | |
33 | |
34 [usage(2) list directory.( for archive )] | |
35 $ cd /mnt/nas/2017/20170702 | |
36 $ ./imgtgz -l | |
37 ` | |
38 fmt.Fprintf( os.Stderr, help ) | |
39 os.Exit( 1 ) | |
40 } | |
41 | |
42 if strings.Compare( os.Args[1], "-l" ) == 0 { | |
43 list_dir() | |
44 os.Exit( 0 ) | |
45 } | |
46 | |
47 hdir := os.Args[1] //hdir := "Y:\\2014\\20141030\\角館2\\0100072890" | |
48 do_archive( hdir ) | |
49 } | |
50 | |
51 func list_dir() { | |
52 r, err := regexp.Compile( "0[1238][0-9]{8}$" ) | |
53 if err != nil { | |
54 log.Fatal( err ) | |
55 } | |
56 | |
57 filepath.Walk( ".", func( path string, info os.FileInfo, err error ) error { | |
58 if info.IsDir() && r.MatchString( path ) { | |
59 p, _ := filepath.Abs( "." ) | |
60 p = filepath.Join( p, path ) | |
61 p = filepath.FromSlash( p ) | |
62 fmt.Println( p ) | |
63 } | |
64 return nil | |
65 } ) | |
66 } | |
67 | |
68 func do_archive( hdir string ) { | |
69 r, err := regexp.Compile( "0[1238][0-9]{8}$" ) | |
70 if err != nil { | |
71 log.Fatal( err ) | |
72 } | |
73 m := r.FindString( hdir ) | |
74 if len( m ) == 0 { | |
75 log.Fatal( err ) | |
76 } | |
77 | |
78 var images []string | |
79 | |
80 fi, _ := os.Stat( hdir ) | |
81 if fi.IsDir() { | |
82 filepath.Walk( hdir, func( path string, info os.FileInfo, err error ) error { | |
83 if !info.IsDir() && strings.HasSuffix( path, "jpg" ) { | |
84 images = append( images, path ) | |
85 } | |
86 return nil | |
87 } ) | |
88 } else { | |
89 fmt.Fprintf( os.Stderr, "%s: not directory\n", hdir ) | |
90 log.Fatal( err ) | |
91 } | |
92 | |
93 tar_gzip( m + ".tgz", images ) | |
94 } | |
95 | |
96 func tar_gzip( tgzfile string, images []string ) { | |
97 | |
98 tgz, err := os.Create( tgzfile ) | |
99 if err != nil { | |
100 log.Fatal( err ) | |
101 } | |
102 defer tgz.Close() | |
103 | |
104 gw := gzip.NewWriter( tgz ) | |
105 defer gw.Close() | |
106 tw := tar.NewWriter( gw ) | |
107 defer tw.Close() | |
108 | |
109 for i, file := range images { | |
110 f, err := os.Open( file ) | |
111 if err != nil { | |
112 log.Fatal( err ) | |
113 } | |
114 | |
115 stat, _ := f.Stat() | |
116 header := new( tar.Header ) | |
117 header.Name = fmt.Sprintf( "%d.jpg", i ) | |
118 header.Size = stat.Size() | |
119 header.Mode = int64( stat.Mode() ) | |
120 header.ModTime = stat.ModTime() | |
121 | |
122 if err := tw.WriteHeader( header ); err != nil { | |
123 log.Fatal( err ) | |
124 } | |
125 if _, err := io.Copy( tw, f ); err != nil { | |
126 log.Fatal( err ) | |
127 } | |
128 f.Close() | |
129 } | |
130 } | |
131 |