Go通过ssh删除远程文件或递归遍历删除远程文件夹

本文介绍了如何使用Go语言通过ssh协议实现远程文件的删除操作,包括直接删除文件以及递归遍历并删除整个文件夹的步骤。在删除前,还会判断目标路径是文件还是文件夹,以选择合适的删除方法。

Go通过ssh删除远程文件或递归遍历删除远程文件夹

学习了Go语言后,打算利用最近比较空一点,写一个前端部署工具,不需要每次都复制粘贴的麻烦,上传文件的文件,可能之前已经不输过一次,所以需要把原始文件删除

首先删除文件的方法

//这个很简单,就是直接删除
func removeFile(sftpClient *sftp.Client, remotePath string) {
   
   
	sftpClient.Remove(path.Join(remotePath))
	fmt.Println(remotePath + "  delete file")
}

遍历删除远程文件夹

远程文件夹不能直接删除非空文件夹,所以需要我们手动遍历删除文件


                
package main import ( "fmt" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/sftp" "io" "os" "path/filepath" ) func TransferDirectory(client *ssh.Client, localDir, remoteDir string) error { sftpClient, err := sftp.NewClient(client) if err != nil { return fmt.Errorf("无法创建 SFTP 客户端: %v", err) } defer sftpClient.Close() // 创建远程 csvfile 目录 csvDir := filepath.Join(remoteDir, "csvfile") csvDir = filepath.ToSlash(csvDir) if err := sftpClient.MkdirAll(csvDir); err != nil { return fmt.Errorf("创建 csvfile 文件夹失败: %v", err) } // 设置 csvfile 文件夹权限为755 chmodCmd := fmt.Sprintf("chmod 755 %s", csvDir) session, err := client.NewSession() if err != nil { return fmt.Errorf("无法创建 SSH 会话: %v", err) } defer session.Close() if err := session.Run(chmodCmd); err != nil { return fmt.Errorf("设置 csvfile 文件夹权限失败: %v", err) } // 遍历本地 csvfile 目录 err = filepath.Walk(localDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // 只处理 csv 文件 if filepath.Ext(info.Name()) != ".csv" { return nil } // 计算相对路径 relPath, err := filepath.Rel(localDir, path) if err != nil { return err } // 计算远程路径 remotePath := filepath.Join(csvDir, relPath) remotePath = filepath.ToSlash(remotePath) // 打开本地文件 localFile, err := os.Open(path) if err != nil { return fmt.Errorf("打开本地文件 %s 失败: %v", path, err) } defer localFile.Close() // 创建远程文件 remoteFile, err := sftpClient.Create(remotePath) if err != nil { return fmt.Errorf("创建远程文件 %s 失败: %v", remotePath, err) } defer remoteFile.Close() // 复制文件内容 _, err = io.Copy(remoteFile, localFile) if err != nil { return fmt.Errorf("复制文件 %s 到 %s 失败: %v", path, remotePath, err) } return nil }) return err }我本地的文件目录是\csvfile\8CD1D03F\torrents.csv,为什么执行上述代码提示创建远程文件创建远程文件 /root/csvfile/8CD1D03F/torrents.csv 失败: file does not exist,请根据我的情况重新修改代码
最新发布
11-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值