Mercurial > mercurial > hgweb_rsearcher.cgi
view go/imgtgz.go @ 13:f5ffc34f045a
manage DB.
author | pyon@macmini |
---|---|
date | Wed, 14 Nov 2018 19:43:40 +0900 |
parents | d3b8cd5aeb70 |
children |
line wrap: on
line source
/* 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() } }