這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package main
import (
"bufio"
"io"
"log"
"os"
"os/exec"
"strings"
"time"
)
const (
filename = "c:\\myetc\\remote.etc"
dotfilename = "c:\\myetc\\.filename"
)
func main() {
var servicefilepath string
var serviceIP string
var passwd string
var serviceusername string
var port string
var spath string
var sfilename string
var splitstrings []string
//開啟之前應該判斷檔案是否存在
_, err := os.Stat(filename)
if err != nil {
log.Println("檔案不存在!")
log.Println("設定的範例:c:\\myetc\\remote.etc")
log.Println("m_ta/m_ta@192.168.224.128:22:/home/m_ta/src")
return
}
f, err := os.Open(filename) //開啟檔案
//開啟檔案出錯處理
defer func() {
f.Close()
}()
if nil == err {
buff := bufio.NewReader(f) //讀入緩衝
for {
line, err := buff.ReadString('\n') //以'\n'為結束符讀入一行
if err != nil || io.EOF == err {
break
}
//如果是#開頭的則認為是注釋符
strings.Trim(line, " ")
if ok := strings.Contains(line, "#"); ok {
continue
}
//去斷行符號分行符號
//範例 m_ta/m_ta@192.168.224.128:22:/home/m_ta/src
splitstrings = strings.FieldsFunc(strings.Replace(line, "\r\n", "", -1), func(char rune) bool {
switch char {
case ':', '/', '@':
return true
}
return false
})
passwd, serviceusername, serviceIP, port = splitstrings[0], splitstrings[1], splitstrings[2], splitstrings[3]
}
f.Close()
f, err := os.Open(dotfilename) //開啟檔案
//開啟檔案出錯處理
defer func() {
f.Close()
}()
if nil == err {
buff := bufio.NewReader(f) //讀入緩衝
line, err := buff.ReadString('\n') //以'\n'為結束符讀入一行
if err != nil || io.EOF == err {
return
}
//DOS下檔案名稱要用兩個反斜線
linetmp := strings.Replace(line, "\\", "\\\\", -1)
//去了分行符號
linetmp = strings.Replace(line, "\n", "", -1)
//取檔案名稱
line = strings.Replace(line, "\\", "/", -1)
tmpsplitstrings := strings.SplitN(line, "/", strings.Count(line, "/")+1)
sfilename = tmpsplitstrings[strings.Count(line, "/")]
//取路徑 把檔案名稱替換了
tmpsplitstrings = strings.Split(line, "src")
spath = strings.Replace(tmpsplitstrings[1], sfilename, "", -1)
servicefilepath = "/" + strings.Join(splitstrings[4:], "/") + spath
parameter := serviceusername + "@" + serviceIP + ":" + servicefilepath
log.Println(linetmp, "--->", parameter)
cmd := exec.Command("pscp.exe", "-P", port, "-pw", passwd, linetmp, parameter)
err = cmd.Run()
if err != nil {
log.Print(err)
} else {
log.Print("OK!")
}
}
time.Sleep(1 * time.Second)
}
}