Mercurial > mercurial > hgweb_rsearcher.cgi
diff go/imgtgz.go @ 0:d3b8cd5aeb70
make repo.
author | pyon@macmini |
---|---|
date | Sun, 30 Sep 2018 17:27:04 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/go/imgtgz.go Sun Sep 30 17:27:04 2018 +0900 @@ -0,0 +1,131 @@ +/* imgtgz + [usage(1) archive images.] + $ mkdir 20170707 + $ cd 20170707 + $ ./imgtgz /mnt/nas/2017/20170702/xxxxx/0300012345 + + [usage(2) list directory.( for archive )] + $ cd /mnt/nas/2017/20170702 + $ ./imgtgz -l + */ +package main + +import ( + "archive/tar" + "compress/gzip" + "fmt" + "io" + "log" + "os" + "path/filepath" + "regexp" + "strings" +) + + +func main() { + if len( os.Args ) == 1 { + help := ` + [usage(1) archive images.] + $ mkdir 20170707 + $ cd 20170707 + $ ./imgtgz /mnt/nas/2017/20170702/xxxxx/0300012345 + + [usage(2) list directory.( for archive )] + $ cd /mnt/nas/2017/20170702 + $ ./imgtgz -l +` + fmt.Fprintf( os.Stderr, help ) + os.Exit( 1 ) + } + + if strings.Compare( os.Args[1], "-l" ) == 0 { + list_dir() + os.Exit( 0 ) + } + + hdir := os.Args[1] //hdir := "Y:\\2014\\20141030\\角館2\\0100072890" + do_archive( hdir ) +} + +func list_dir() { + r, err := regexp.Compile( "0[1238][0-9]{8}$" ) + if err != nil { + log.Fatal( err ) + } + + filepath.Walk( ".", func( path string, info os.FileInfo, err error ) error { + if info.IsDir() && r.MatchString( path ) { + p, _ := filepath.Abs( "." ) + p = filepath.Join( p, path ) + p = filepath.FromSlash( p ) + fmt.Println( p ) + } + return nil + } ) +} + +func do_archive( hdir string ) { + r, err := regexp.Compile( "0[1238][0-9]{8}$" ) + if err != nil { + log.Fatal( err ) + } + m := r.FindString( hdir ) + if len( m ) == 0 { + log.Fatal( err ) + } + + var images []string + + fi, _ := os.Stat( hdir ) + if fi.IsDir() { + filepath.Walk( hdir, func( path string, info os.FileInfo, err error ) error { + if !info.IsDir() && strings.HasSuffix( path, "jpg" ) { + images = append( images, path ) + } + return nil + } ) + } else { + fmt.Fprintf( os.Stderr, "%s: not directory\n", hdir ) + log.Fatal( err ) + } + + tar_gzip( m + ".tgz", images ) +} + +func tar_gzip( tgzfile string, images []string ) { + + tgz, err := os.Create( tgzfile ) + if err != nil { + log.Fatal( err ) + } + defer tgz.Close() + + gw := gzip.NewWriter( tgz ) + defer gw.Close() + tw := tar.NewWriter( gw ) + defer tw.Close() + + for i, file := range images { + f, err := os.Open( file ) + if err != nil { + log.Fatal( err ) + } + + stat, _ := f.Stat() + header := new( tar.Header ) + header.Name = fmt.Sprintf( "%d.jpg", i ) + header.Size = stat.Size() + header.Mode = int64( stat.Mode() ) + header.ModTime = stat.ModTime() + + if err := tw.WriteHeader( header ); err != nil { + log.Fatal( err ) + } + if _, err := io.Copy( tw, f ); err != nil { + log.Fatal( err ) + } + f.Close() + } +} +