前言
使用xshell在几个服务器之间传输数据的时候,如果需要传输很多带目录的多个文件,xshell不方便,所以使用golang写了一个小工具,可以直接在两个服务器之间传输文件(保留原有的目录的格式)
一、代码
package main
import (
"github.com/pkg/sftp"
"golang.org/x/crypto/ssh"
"time"
"fmt"
"io/ioutil"
"path"
"os"
"flag"
"strings"
"strconv"
"sync"
)
// -L 本地目录 如果有-s则便是从远程下载到本地 如果有-d表示从本地下载到远程
var source = flag.String("s", "","")
var dest = flag.String("d","","")
var help = flag.Bool("h",false,"")
var local = flag.String("L","","")
var contiuneIfError = flag.Bool("c",true,"")
var exclude = flag.String("e","","")
var include = flag.String("i","","")
var successCount int = 0
var errorCount int = 0
var errorPaths = make([]string,0)
func main(){
flag.Parse()
if *help {
fmt.Println("示例: ./sftp.exe -s 用户名:密码:10.X.X.X:22:/dev/test -d 用户名:密码:10.X.X.X:22:/opt")
fmt.Println("-s user:passwd:ip:port:dirPath", "源目标服务器信息")
fmt.Println("-d user:passwd:ip:port:dirPath", "目的地服务器信息")
fmt.Println("-L 路径 注:-L不为空时,当有-s时表示从远程下载到本地 当有-d时表示上传")
fmt.Println("优先级:-L>-s>-d")
os.Exit(0)
}
if *local == ""{
if *source == "" || *dest == "" {
fmt.Println("输入格式不规范,使用-h查看使用说明")
os.Exit(0)
}
}
if *local == ""{
s := strings.Split(*source, ":")
e := strings.Split(*dest, ":")
sUser := s[0]
sPwd := s[1]
sHost := s[2]
sPort := s[3]
sPath := s[4]
dUser := e[0]
dPwd := e[1]
dHost := e[2]
dPort := e[3]
dPath := e[4]
if sUser == "" || sPwd == "" || sHost == "" || sPort == "" || sPath == "" ||
dUser == "" || dPwd

本文介绍了一个使用Go语言编写的SFTP文件传输工具,能够实现在不同服务器间快速传输文件,同时保持原有目录结构。工具支持从远程服务器下载到本地,或者将本地文件上传到远程服务器。代码中包含连接SSH服务器、读取目录、传输文件等功能,并提供了命令行参数解析以方便使用。
最低0.47元/天 解锁文章
212

被折叠的 条评论
为什么被折叠?



