From 9303b69ea569bcb5e581147543a3fd58e90d0d25 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期四, 20 八月 2020 20:05:23 +0800
Subject: [PATCH] add get buckets contrl

---
 extend/util/zip.go |  101 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 89 insertions(+), 12 deletions(-)

diff --git a/extend/util/zip.go b/extend/util/zip.go
index cb44ee3..0fac79f 100644
--- a/extend/util/zip.go
+++ b/extend/util/zip.go
@@ -5,10 +5,14 @@
 	"basic.com/valib/logger.git"
 	"compress/gzip"
 	"errors"
+	"fmt"
 	"io"
 	"io/ioutil"
+	"log"
 	"os"
+	"os/exec"
 	"path"
+	"path/filepath"
 	"strings"
 )
 
@@ -26,7 +30,7 @@
 	logger.Debug("鏂囦欢鍚嶇О鏄�", FileName)
 	//鍒涘缓瀛樻斁鍘嬬缉鏂囦欢鐨勮矾寰�(濡傛灉鏂囦欢澶逛笉瀛樺湪)
 
-	if !dirExists(DesPathName) {
+	if !DirExists(DesPathName) {
 		os.MkdirAll(DesPathName, 0777)
 	}
 	logger.Debug("鍒涘缓鏂囦欢")
@@ -121,11 +125,11 @@
 	// 娓呯悊璺緞瀛楃涓�
 	src = path.Clean(src)
 	// 鍒ゆ柇瑕佹墦鍖呯殑鏂囦欢鎴栫洰褰曟槸鍚﹀瓨鍦�
-	if !exists(src) {
+	if !Exists(src) {
 		return errors.New("瑕佹墦鍖呯殑鏂囦欢鎴栫洰褰曚笉瀛樺湪锛�" + src)
 	}
 	// 鍒ゆ柇鐩爣鏂囦欢鏄惁瀛樺湪
-	if fileExists(dstTar) {
+	if FileExists(dstTar) {
 		if failIfExist { // 涓嶈鐩栧凡瀛樺湪鐨勬枃浠�
 			return errors.New("鐩爣鏂囦欢宸茬粡瀛樺湪锛�" + dstTar)
 		} else { // 瑕嗙洊宸插瓨鍦ㄧ殑鏂囦欢
@@ -277,6 +281,12 @@
 	return nil
 }
 
+func UnTarGzByCmd(srcFile string, dstPath string) (string,error) {
+	cmd := exec.Command("tar","-zxvf", srcFile, "-C", dstPath)
+	outPut, err := cmd.Output()
+	return string(outPut), err
+}
+
 // 鍥犱负瑕佸湪 defer 涓叧闂枃浠讹紝鎵�浠ヨ鍗曠嫭鍒涘缓涓�涓嚱鏁�
 func unTarFile(dstFile string, tr *tar.Reader) error {
 	// 鍒涘缓绌烘枃浠讹紝鍑嗗鍐欏叆瑙e寘鍚庣殑鏁版嵁
@@ -295,20 +305,87 @@
 	return nil
 }
 
-// 鍒ゆ柇妗f鏄惁瀛樺湪
-func exists(name string) bool {
-	_, err := os.Stat(name)
-	return err == nil || os.IsExist(err)
-}
-
 // 鍒ゆ柇鏂囦欢鏄惁瀛樺湪
-func fileExists(filename string) bool {
+func FileExists(filename string) bool {
 	fi, err := os.Stat(filename)
 	return (err == nil || os.IsExist(err)) && !fi.IsDir()
 }
 
 // 鍒ゆ柇鐩綍鏄惁瀛樺湪
-func dirExists(dirname string) bool {
+func DirExists(dirname string) bool {
 	fi, err := os.Stat(dirname)
 	return (err == nil || os.IsExist(err)) && fi.IsDir()
-}
\ No newline at end of file
+}
+
+func CopyDirByCmd(src ,dest string) (string,error) {
+	cmd := exec.Command("cp","-r", src, dest)
+	outPut, err := cmd.Output()
+	return string(outPut), err
+}
+
+//鏂囦欢澶瑰鍒�
+func CopyDir(src string, dest string) {
+	src_original := src
+	err := filepath.Walk(src, func(src string, f os.FileInfo, err error) error {
+		if f == nil {
+			return err
+		}
+		if f.IsDir() {
+			CopyDir(f.Name(), dest+"/"+f.Name())
+		} else {
+			fmt.Println(src)
+			fmt.Println(src_original)
+			fmt.Println(dest)
+
+			dest_new := strings.Replace(src, src_original, dest, -1)
+			fmt.Println(dest_new)
+			fmt.Println("CopyFile:" + src + " to " + dest_new)
+			CopyFile(src, dest_new)
+		}
+		return nil
+	})
+	if err != nil {
+		fmt.Printf("filepath.Walk() returned %v\n", err)
+	}
+}
+
+//澶ф枃浠跺鍒�
+func CopyFile(srcFileName string, dstFileName string) {
+	//鎵撳紑婧愭枃浠�
+	srcFile, err := os.Open(srcFileName)
+	if err != nil {
+		log.Fatalf("婧愭枃浠惰鍙栧け璐�,鍘熷洜鏄�:%v\n", err)
+	}
+	defer func() {
+		err = srcFile.Close()
+		if err != nil {
+			log.Fatalf("婧愭枃浠跺叧闂け璐�,鍘熷洜鏄�:%v\n", err)
+		}
+	}()
+
+	//鍒涘缓鐩爣鏂囦欢,绋嶅悗浼氬悜杩欎釜鐩爣鏂囦欢鍐欏叆鎷疯礉鍐呭
+	distFile, err := os.Create(dstFileName)
+	if err != nil {
+		log.Fatalf("鐩爣鏂囦欢鍒涘缓澶辫触,鍘熷洜鏄�:%v\n", err)
+	}
+	defer func() {
+		err = distFile.Close()
+		if err != nil {
+			log.Fatalf("鐩爣鏂囦欢鍏抽棴澶辫触,鍘熷洜鏄�:%v\n", err)
+		}
+	}()
+	//瀹氫箟鎸囧畾闀垮害鐨勫瓧鑺傚垏鐗�,姣忔鏈�澶氳鍙栨寚瀹氶暱搴�
+	var tmp = make([]byte, 1024*4)
+	//寰幆璇诲彇骞跺啓鍏�
+	for {
+		n, err := srcFile.Read(tmp)
+		n, _ = distFile.Write(tmp[:n])
+		if err != nil {
+			if err == io.EOF {//璇诲埌浜嗘枃浠舵湯灏�,骞朵笖鍐欏叆瀹屾瘯,浠诲姟瀹屾垚杩斿洖(鍏抽棴鏂囦欢鐨勬搷浣滅敱defer鏉ュ畬鎴�)
+				return
+			} else {
+				log.Fatalf("鎷疯礉杩囩▼涓彂鐢熼敊璇�,閿欒鍘熷洜涓�:%v\n", err)
+			}
+		}
+	}
+}

--
Gitblit v1.8.0