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