golang之sftp小工具

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

golang之sftp小工具


前言

使用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 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值