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()
+    }
+}
+