libf il y a 3 semaines
Parent
commit
c7abb91459
3 fichiers modifiés avec 31 ajouts et 12 suppressions
  1. 3 0
      sync/mqlsync.sh
  2. 7 0
      sync/sync.bat
  3. 21 12
      sync/sync.go

+ 3 - 0
sync/mqlsync.sh

@@ -0,0 +1,3 @@
+
+./sync ~/go/bin/matrix/mql data/mql matrix:NatsEtcdParser@47.92.151.165/opt/matrix/test
+

+ 7 - 0
sync/sync.bat

@@ -0,0 +1,7 @@
+
+rem 通过特定文件确定源目录
+IF EXIST x:\odbserver set src=x:
+IF EXIST y:\odbserver set src=y:
+IF EXIST z:\odbserver set src=z:
+
+sync.exe %src% ..\Videos matrix:matrix@27.193.12.228/home/matrix/odbserver matrix:matrix@27.193.12.229/home/matrix/odbserver matrix:matrix@27.193.12.230/home/matrix/odbserver matrix:matrix@27.193.12.231/home/matrix/odbserver matrix:matrix@27.193.12.232/home/matrix/odbserver

+ 21 - 12
sync/sync.go

@@ -35,6 +35,9 @@ var logger = clog.New()
 func PrintUsage() {
 	println(`Usage:
 sync <frompath> <topath> [<copytopath> ...]
+<frompath>     源文件路径
+<topath>       目标文件路径,增量同步
+<copytopath>   副本文件路径,<topath>增量同步
 `)
 }
 
@@ -136,8 +139,9 @@ func sync_once(frompath, topath string, copytopath ...string) (err error) {
 			if tofi != nil && fromfi.Size() == tofi.Size() && fromfi.ModTime() == tofi.ModTime() {
 				return true
 			}
-			fmt.Print(fromfile, " ==> ", tofile)
-			frombs, e := ReadFile(fromfile)
+			progressinfo := fmt.Sprint(fromfile, " ==> ", tofile)
+			fmt.Print(progressinfo)
+			frombs, e := ReadFile(fromfile, progressinfo)
 			if e != nil {
 				err = fmt.Errorf("from file %v", e)
 				return false
@@ -162,12 +166,11 @@ func sync_once(frompath, topath string, copytopath ...string) (err error) {
 	return
 }
 
-func ReadFile(name string) (data []byte, err error) {
-	fmt.Print("   -.--%")
+func ReadFile(name string, progressinfo string) (data []byte, err error) {
 	defer fmt.Println()
 	data = make([]byte, 0, 512)
 	for {
-		data, err = ReadFileContinue(name, data)
+		data, err = ReadFileContinue(name, progressinfo, data)
 		if err == io.EOF {
 			err = nil
 			return
@@ -175,7 +178,7 @@ func ReadFile(name string) (data []byte, err error) {
 	}
 }
 
-func ReadFileContinue(name string, data []byte) ([]byte, error) {
+func ReadFileContinue(name string, progressinfo string, data []byte) ([]byte, error) {
 	f, err := os.Open(name)
 	if err != nil {
 		return data, err
@@ -204,17 +207,22 @@ func ReadFileContinue(name string, data []byte) ([]byte, error) {
 	}
 
 	statuschan := make(chan int64, 100)
+	done := make(chan struct{}, 1)
 	go func() {
+		rateinfo := ""
 		for range statuschan {
-			s := fmt.Sprintf("%.2f%%", 100*float64(offset)/float64(filesize))
-			bs := strings.Repeat("\b", len(s))
-			fmt.Printf("%s%s", bs, s)
+			// bs := strings.Repeat("\b", len(progressinfo+rateinfo))
+			rateinfo := fmt.Sprintf("    %.2f%%    ", 100*float64(offset)/float64(filesize))
+			// fmt.Printf("\r%s%s", bs, progressinfo+rateinfo)
+			fmt.Printf("\r%s", progressinfo+rateinfo)
 		}
 		if offset >= filesize {
-			s := fmt.Sprintf("%.2f%%", 100.)
-			bs := strings.Repeat("\b", len(s))
-			fmt.Printf("%s%s", bs, s)
+			// bs := strings.Repeat("\b", len(progressinfo+rateinfo))
+			rateinfo = fmt.Sprintf("    %.2f%%    ", 100.)
+			// fmt.Printf("\r%s%s", bs, progressinfo+rateinfo)
+			fmt.Printf("\r%s", progressinfo+rateinfo)
 		}
+		done <- struct{}{}
 	}()
 	chunk := int64(1024 * 256)
 	t := time.Now()
@@ -228,6 +236,7 @@ func ReadFileContinue(name string, data []byte) ([]byte, error) {
 		statuschan <- offset
 		if err != nil {
 			close(statuschan)
+			<-done
 			return data[:offset], err
 		}
 		if offset >= int64(cap(data)) {