0
|
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
|