zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
version-control/utils/path.go
@@ -1,201 +1,201 @@
package utils
import (
   "archive/zip"
   "basic.com/valib/logger.git"
   "bufio"
   "bytes"
   "crypto/md5"
   "errors"
   "fmt"
   "io"
   "io/ioutil"
   "os"
   "os/exec"
   "path"
   "path/filepath"
   "runtime"
)
func GetExePath() string {
   dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
   if nil != err {
      dir = "./"
   }
   return dir
}
func PathExists(path string) bool {
   _, err := os.Stat(path)
   if nil == err {
      return true
   }
   if os.IsNotExist(err) {
      return false
   }
   return false
}
func ShellExecute(dir, exe string, args ...string) (string, error) {
   cmd := exec.Command(exe, args...)
   stdout, err := cmd.StdoutPipe()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.StdoutPipe err:%v", err)
      return "", errors.New(msg)
   }
   cmd.Stderr = os.Stderr
   if "" != dir {
      cmd.Dir = dir
   }
   err = cmd.Start()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.Start err:%v", err)
      return "", errors.New(msg)
   }
   var buffer bytes.Buffer
   reader := bufio.NewReader(stdout)
   for {
      line, err2 := reader.ReadString('\n')
      if io.EOF == err2 {
         break
      }
      if nil != err2 {
         msg := fmt.Sprintf("ShellExecute reader.ReadString err:%v", err2)
         return "", errors.New(msg)
      }
      buffer.WriteString(line)
   }
   err = cmd.Wait()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.Wait err:%v", err)
      return "", errors.New(msg)
   }
   return buffer.String(), nil
}
func DeCompressZip(zipFile, dest string) error {
   reader, err := zip.OpenReader(zipFile)
   if err != nil {
      return err
   }
   defer reader.Close()
   for _, f := range reader.Reader.File {
      if f.FileInfo().IsDir() {
         fullPath := path.Join(dest, f.Name)
         err = os.MkdirAll(fullPath, os.ModePerm)
         if err != nil {
            return err
         }
         continue
      }
      r, err := f.Open()
      if err != nil {
         return err
      }
      defer r.Close()
      fullPath := path.Join(dest, f.Name)
      w, err := os.Create(fullPath)
      if err != nil {
         return err
      }
      defer w.Close()
      _, err = io.Copy(w, r)
      if err != nil {
         return err
      }
   }
   return nil
}
func Md5sum(filepath string) (string, error) {
   f, err := os.Open(filepath)
   if nil != err {
      return "", err
   }
   defer f.Close()
   payload, err := ioutil.ReadAll(f)
   if nil != err {
      return "", err
   }
   md5sum := fmt.Sprintf("%x", md5.Sum(payload))
   runtime.GC()
   return md5sum, nil
}
//强制更新文件内容,(与copy命令有区别)
func CopyFileContents(src, dest string) (err error) {
   in, err := os.Open(src)
   if nil != err {
      return
   }
   defer in.Close()
   if PathExists(dest) { //替换前重命名备份原来文件
      tmpDest := dest + "1"
      os.Rename(dest, tmpDest)
   }
   out, err := os.Create(dest)
   if nil != err {
      return
   }
   defer func() {
      cErr := out.Close()
      if nil != cErr {
         err = cErr
      }
   }()
   if _, err = io.Copy(out, in); err != nil {
      return
   }
   err = out.Sync()
   return
}
func DeCompressTGZ(gzFile, dest string) (err error) {
   logger.Info("开始解压" + gzFile + "到" + dest + "\n")
   command := "tar -zxf " + gzFile + " -C " + dest
   result, err := execCommand(command)
   logger.Info("执行命令:", command)
   logger.Info(string(result) + "\n")
   logger.Info("解压" + gzFile + "到" + dest + "完成!")
   return
}
func CompressTGZ(gzFile, dest string) (err error) {
   logger.Info("开始压缩" + gzFile + " " + dest + "\n")
   command := "tar -zcf " + gzFile + " -C " + dest + " ."
   result, err := execCommand(command)
   if err != nil {
      logger.Error("压缩失败"+gzFile+" "+dest+",error:", err)
      return
   }
   logger.Info(string(result) + "\n")
   logger.Info("压缩" + gzFile + " " + dest + "完成!")
   return
}
//执行命令
func execCommand(cmd string) ([]byte, error) {
   return exec.Command("/bin/bash", "-c", cmd).Output()
}
package utils
import (
   "archive/zip"
   "basic.com/valib/logger.git"
   "bufio"
   "bytes"
   "crypto/md5"
   "errors"
   "fmt"
   "io"
   "io/ioutil"
   "os"
   "os/exec"
   "path"
   "path/filepath"
   "runtime"
)
func GetExePath() string {
   dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
   if nil != err {
      dir = "./"
   }
   return dir
}
func PathExists(path string) bool {
   _, err := os.Stat(path)
   if nil == err {
      return true
   }
   if os.IsNotExist(err) {
      return false
   }
   return false
}
func ShellExecute(dir, exe string, args ...string) (string, error) {
   cmd := exec.Command(exe, args...)
   stdout, err := cmd.StdoutPipe()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.StdoutPipe err:%v", err)
      return "", errors.New(msg)
   }
   cmd.Stderr = os.Stderr
   if "" != dir {
      cmd.Dir = dir
   }
   err = cmd.Start()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.Start err:%v", err)
      return "", errors.New(msg)
   }
   var buffer bytes.Buffer
   reader := bufio.NewReader(stdout)
   for {
      line, err2 := reader.ReadString('\n')
      if io.EOF == err2 {
         break
      }
      if nil != err2 {
         msg := fmt.Sprintf("ShellExecute reader.ReadString err:%v", err2)
         return "", errors.New(msg)
      }
      buffer.WriteString(line)
   }
   err = cmd.Wait()
   if nil != err {
      msg := fmt.Sprintf("ShellExecute cmd.Wait err:%v", err)
      return "", errors.New(msg)
   }
   return buffer.String(), nil
}
func DeCompressZip(zipFile, dest string) error {
   reader, err := zip.OpenReader(zipFile)
   if err != nil {
      return err
   }
   defer reader.Close()
   for _, f := range reader.Reader.File {
      if f.FileInfo().IsDir() {
         fullPath := path.Join(dest, f.Name)
         err = os.MkdirAll(fullPath, os.ModePerm)
         if err != nil {
            return err
         }
         continue
      }
      r, err := f.Open()
      if err != nil {
         return err
      }
      defer r.Close()
      fullPath := path.Join(dest, f.Name)
      w, err := os.Create(fullPath)
      if err != nil {
         return err
      }
      defer w.Close()
      _, err = io.Copy(w, r)
      if err != nil {
         return err
      }
   }
   return nil
}
func Md5sum(filepath string) (string, error) {
   f, err := os.Open(filepath)
   if nil != err {
      return "", err
   }
   defer f.Close()
   payload, err := ioutil.ReadAll(f)
   if nil != err {
      return "", err
   }
   md5sum := fmt.Sprintf("%x", md5.Sum(payload))
   runtime.GC()
   return md5sum, nil
}
//强制更新文件内容,(与copy命令有区别)
func CopyFileContents(src, dest string) (err error) {
   in, err := os.Open(src)
   if nil != err {
      return
   }
   defer in.Close()
   if PathExists(dest) { //替换前重命名备份原来文件
      tmpDest := dest + "1"
      os.Rename(dest, tmpDest)
   }
   out, err := os.Create(dest)
   if nil != err {
      return
   }
   defer func() {
      cErr := out.Close()
      if nil != cErr {
         err = cErr
      }
   }()
   if _, err = io.Copy(out, in); err != nil {
      return
   }
   err = out.Sync()
   return
}
func DeCompressTGZ(gzFile, dest string) (err error) {
   logger.Info("开始解压" + gzFile + "到" + dest + "\n")
   command := "tar -zxf " + gzFile + " -C " + dest
   result, err := execCommand(command)
   logger.Info("执行命令:", command)
   logger.Info(string(result) + "\n")
   logger.Info("解压" + gzFile + "到" + dest + "完成!")
   return
}
func CompressTGZ(gzFile, dest string) (err error) {
   logger.Info("开始压缩" + gzFile + " " + dest + "\n")
   command := "tar -zcf " + gzFile + " -C " + dest + " ."
   result, err := execCommand(command)
   if err != nil {
      logger.Error("压缩失败"+gzFile+" "+dest+",error:", err)
      return
   }
   logger.Info(string(result) + "\n")
   logger.Info("压缩" + gzFile + " " + dest + "完成!")
   return
}
//执行命令
func execCommand(cmd string) ([]byte, error) {
   return exec.Command("/bin/bash", "-c", cmd).Output()
}