开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 109|回复: 4
打印 上一主题 下一主题
收起左侧

[精币悬赏] 求助一个远程备份linux系统里文件夹的源码

[复制链接]
结帖率:88% (22/25)
跳转到指定楼层
楼主
发表于 昨天 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   江苏省苏州市
400精币
求助一个远程备份linux系统里文件夹的源码或者求一个写代码的方向,把linux系统里的某个文件夹定时备份到本地

签到天数: 1 天

沙发
发表于 昨天 16:40 | 只看该作者   江苏省苏州市
原理1是本地定期读取远端共享文件夹,枚举后保存。2是自己C/S模式实现远程通信备份文件
回复

使用道具 举报

结帖率:0% (0/2)

签到天数: 3 天

板凳
发表于 昨天 16:47 | 只看该作者   河南省郑州市
linux架个FTP,本地定时备份
回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 2 天

地板
发表于 昨天 16:59 | 只看该作者   山东省青岛市
用ssh,应该是比较方便的
回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 2 天

地下
发表于 昨天 17:02 | 只看该作者   山东省青岛市
用豆包写的,,,仅供参考。。

### 易语言远程备份Linux系统文件夹的实现方案

要实现从Windows系统使用易语言远程备份Linux系统里的文件夹,最佳方案是通过SSH协议进行安全连接。以下是一个完整的易语言源码实现,它使用SSH协议连接到Linux服务器,并通过SFTP协议传输文件。

首先,你需要在易语言中添加精易模块,该模块提供了SSH和SFTP功能的支持。以下是完整的源码:

```易语言
.版本 2
.支持库 eAPI

.程序集 窗口程序集_窗口1
.程序集变量 SSH连接, 整数型
.程序集变量 SFTP连接, 整数型
.程序集变量 备份路径, 文本型
.程序集变量 远程路径, 文本型
.程序集变量 日志内容, 文本型

.子程序 __启动窗口_创建完毕
.局部变量 当前路径, 文本型
    当前路径 = 取运行目录()
    编辑框_本地路径.内容 = 当前路径 + "\备份\"
    编辑框_远程路径.内容 = "/home/backup/"
    时钟1.时钟周期 = 1000
    日志内容 = "程序已启动,请配置服务器信息并连接..."
    刷新日志()

.子程序 _按钮_连接_被单击
.局部变量 服务器, 文本型
.局部变量 用户名, 文本型
.局部变量 密码, 文本型
.局部变量 端口, 整数型
.局部变量 连接结果, 逻辑型
    服务器 = 编辑框_服务器.内容
    用户名 = 编辑框_用户名.内容
    密码 = 编辑框_密码.内容
    端口 = 到整数(编辑框_端口.内容)
   
    如果 (服务器 = "" 或 用户名 = "" 或 密码 = "")
        信息框 ("请填写完整的服务器信息!", 0, "错误")
        返回
    结束
   
    加入日志 ("正在连接到服务器: " + 服务器 + ":" + 到文本(端口))
    SSH连接 = SSH_连接(服务器, 端口, 用户名, 密码)
   
    如果 (SSH连接 > 0)
        加入日志 ("SSH连接成功,正在建立SFTP连接...")
        SFTP连接 = SFTP_打开(SSH连接)
        
        如果 (SFTP连接 > 0)
            加入日志 ("SFTP连接成功,可以开始备份操作!")
            按钮_连接.禁止 = 真
            按钮_断开.禁止 = 假
            按钮_备份.禁止 = 假
        否则
            加入日志 ("SFTP连接失败,请检查服务器配置!")
            SSH_断开(SSH连接)
            SSH连接 = 0
        结束
    否则
        加入日志 ("SSH连接失败,请检查服务器信息和网络连接!")
    结束

.子程序 _按钮_断开_被单击
    如果 (SFTP连接 > 0)
        SFTP_关闭(SFTP连接)
        加入日志 ("SFTP连接已断开")
        SFTP连接 = 0
    结束
   
    如果 (SSH连接 > 0)
        SSH_断开(SSH连接)
        加入日志 ("SSH连接已断开")
        SSH连接 = 0
    结束
   
    按钮_连接.禁止 = 假
    按钮_断开.禁止 = 真
    按钮_备份.禁止 = 真

.子程序 _按钮_备份_被单击
.局部变量 选择路径, 文本型
.局部变量 结果, 逻辑型
    备份路径 = 编辑框_本地路径.内容
    远程路径 = 编辑框_远程路径.内容
   
    如果 (SFTP连接 <= 0)
        信息框 ("请先建立SFTP连接!", 0, "错误")
        返回
    结束
   
    如果 (远程路径 = "")
        信息框 ("请指定远程路径!", 0, "错误")
        返回
    结束
   
    如果 (备份路径 = "")
        选择路径 = 取运行目录() + "\备份\"
        如果 (信息框 ("未指定本地备份路径,将使用默认路径: " + 选择路径 + ",是否继续?", 1, "提示") = 2)
            返回
        结束
        备份路径 = 选择路径
        编辑框_本地路径.内容 = 备份路径
    结束
   
    如果 (取目录是否存在(备份路径) = 假)
        创建目录 (备份路径)
    结束
   
    加入日志 ("开始备份远程文件夹: " + 远程路径)
    进度条1.位置 = 0
    按钮_备份.禁止 = 真
    线程_启动 ("备份文件夹", 远程路径)

.子程序 备份文件夹, 文本型, 远程目录
.局部变量 本地目录, 文本型
.局部变量 文件列表, 文本型, , "0"
.局部变量 文件数量, 整数型
.局部变量 i, 整数型
.局部变量 文件名, 文本型
.局部变量 远程文件路径, 文本型
.局部变量 本地文件路径, 文本型
.局部变量 文件大小, 整数型
.局部变量 总大小, 整数型
.局部变量 已传输, 整数型
.局部变量 传输结果, 逻辑型
    远程目录 = 参1
   
    // 创建本地对应的目录结构
    本地目录 = 备份路径 + 子文本替换(远程目录, "/", "\", , , 假)
    如果 (取目录是否存在(本地目录) = 假)
        创建目录 (本地目录)
    结束
   
    // 获取远程目录下的文件列表
    文件数量 = SFTP_取目录下文件(SFTP连接, 远程目录, 文件列表)
    加入日志 ("发现 " + 到文本(文件数量) + " 个文件/文件夹需要备份")
   
    // 计算总大小
    总大小 = 0
    对于 (i = 0; i < 文件数量; i + 1)
        文件名 = 文件列表[i]
        远程文件路径 = 远程目录 + "/" + 文件名
        
        如果 (SFTP_判断是否为目录(SFTP连接, 远程文件路径) = 真)
            // 是目录,递归备份
            线程_启动 ("备份文件夹", 远程文件路径)
        否则
            // 是文件,累加大小
            文件大小 = SFTP_取文件大小(SFTP连接, 远程文件路径)
            总大小 = 总大小 + 文件大小
        结束
    结束
   
    // 开始备份文件
    已传输 = 0
    对于 (i = 0; i < 文件数量; i + 1)
        文件名 = 文件列表[i]
        远程文件路径 = 远程目录 + "/" + 文件名
        本地文件路径 = 本地目录 + "\" + 文件名
        
        如果 (SFTP_判断是否为目录(SFTP连接, 远程文件路径) = 假)
            // 是文件,备份
            加入日志 ("正在备份文件: " + 文件名)
            传输结果 = SFTP_下载文件(SFTP连接, 远程文件路径, 本地文件路径)
            
            如果 (传输结果 = 真)
                文件大小 = SFTP_取文件大小(SFTP连接, 远程文件路径)
                已传输 = 已传输 + 文件大小
                进度条1.位置 = 取整(已传输 * 100 / 总大小)
                加入日志 ("文件 " + 文件名 + " 备份成功")
            否则
                加入日志 ("文件 " + 文件名 + " 备份失败")
            结束
        结束
        
        // 检查是否需要终止
        如果 (时钟1.时钟周期 = 0)
            跳出循环
        结束
    结束
   
    加入日志 ("远程文件夹: " + 远程目录 + " 备份完成")
    按钮_备份.禁止 = 假

.子程序 _按钮_浏览_被单击
.局部变量 选择的路径, 文本型
    选择的路径 = 浏览文件夹 ("请选择备份文件存放的本地路径")
   
    如果 (选择的路径 != "")
        编辑框_本地路径.内容 = 选择的路径 + "\"
    结束

.子程序 _时钟1_周期事件
.局部变量 当前时间, 文本型
    当前时间 = 到文本(取现行时间())
    标签_状态.标题 = "当前状态: " + 当前时间

.子程序 加入日志, 文本型, 日志信息
    日志内容 = 日志内容 + #换行符 + 到文本(取现行时间()) + " - " + 参1
    刷新日志()

.子程序 刷新日志
    编辑框_日志.内容 = 日志内容
    编辑框_日志.滚动到尾()

.子程序 __启动窗口_将被销毁
    _按钮_断开_被单击()
结束子程序
```

要使用这段代码,你需要在易语言中创建一个窗口,并添加以下组件:

1. 标签和编辑框用于输入服务器信息(服务器地址、端口、用户名、密码)
2. 标签和编辑框用于输入远程路径和本地备份路径
3. 浏览按钮用于选择本地备份路径
4. 连接、断开和备份三个功能按钮
5. 一个进度条显示备份进度
6. 一个状态标签显示当前时间
7. 一个多行编辑框显示日志信息
8. 一个时钟控件用于更新状态

使用方法:
1. 填写Linux服务器的连接信息
2. 点击"连接"按钮建立SSH和SFTP连接
3. 指定要备份的远程路径和本地存储路径
4. 点击"备份"按钮开始备份过程

代码中使用了精易模块的SSH和SFTP相关命令,这些命令提供了安全连接Linux服务器并进行文件操作的功能。备份过程会保留原始的目录结构,并在日志中显示详细的备份进度和结果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表