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 |
