windows 两个服务器远程文件夹同步,支持文件新增文件同步、修改文件同步、删除文件同步 python脚本(通过对比文件hash值确认文件是否备修改)

在Python中实现Windows两个服务器之间的文件夹同步,可以通过计算并对比文件的哈希值来判断文件是否被修改过。这里我们使用paramiko进行远程操作,并结合hashlib库计算MD5哈希值:

import os
import paramiko
import hashlib# 定义源与目标服务器信息
src_host = 'source_server_ip'
src_user = 'source_username'
src_password = 'source_password'
src_folder = '/path/to/source/folder'dst_host = 'destination_server_ip'
dst_user = 'destination_username'
dst_password = 'destination_password'
dst_folder = '/path/to/destination/folder'def calculate_md5(sftp, path):"""通过SFTP获取文件内容并计算MD5哈希"""md5_hash = hashlib.md5()with sftp.file(path, mode='rb') as f:while True:data = f.read(8192)if not data:breakmd5_hash.update(data)return md5_hash.hexdigest()def sync_files(sftp_src, src_path, sftp_dst, dst_path):# 遍历源目录下的所有项(文件或子目录)for src_name in sftp_src.listdir_attr(src_path):src_item_path = os.path.join(src_path, src_name.filename)dst_item_path = os.path.join(dst_path, src_name.filename)if S_ISDIR(src_name.st_mode):  # 如果是目录if not sftp_dst.exists(dst_item_path):  # 目录不存在于目标服务器,则创建sftp_dst.mkdir(dst_item_path)sync_files(sftp_src, src_item_path, sftp_dst, dst_item_path)else:  # 是文件if not sftp_dst.exists(dst_item_path):  # 文件不存在于目标服务器,直接上传sftp_dst.put(src_item_path, dst_item_path)else:  # 文件存在时比较MD5哈希值src_file_md5 = calculate_md5(sftp_src, src_item_path)dst_file_md5 = calculate_md5(sftp_dst, dst_item_path)if src_file_md5 != dst_file_md5:# 哈希值不同,更新文件sftp_dst.remove(dst_item_path)sftp_dst.put(src_item_path, dst_item_path)# 处理源服务器上已删除但目标服务器上仍存在的文件for dst_name in sftp_dst.listdir_attr(dst_path):dst_item_path = os.path.join(dst_path, dst_name.filename)if not sftp_src.exists(os.path.join(src_path, dst_name.filename)):# 源服务器上不存在此文件,从目标服务器上删除sftp_dst.remove(dst_item_path)def main():ssh_src = paramiko.SSHClient()ssh_dst = paramiko.SSHClient()# 自动添加主机密钥到known_hostsssh_src.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_dst.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_src.connect(src_host, username=src_user, password=src_password)ssh_dst.connect(dst_host, username=dst_user, password=dst_password)sftp_src = ssh_src.open_sftp()sftp_dst = ssh_dst.open_sftp()sync_files(sftp_src, src_folder, sftp_dst, dst_folder)sftp_src.close()sftp_dst.close()ssh_src.close()ssh_dst.close()if __name__ == "__main__":main()

上述脚本首先定义了一个calculate_md5函数用于计算给定路径下文件的MD5哈希值。在同步过程中,对于已存在的文件,通过比较源和目标服务器上的MD5哈希值来判断文件是否被修改,而不是仅依赖于文件大小和时间戳。同时,也处理了文件删除的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建 卷II 一. 拓扑图 二.有线网络配置 三.无线网络配置 四.出口网络配置 二、有线配置 S1.txt S1#show running-config Building configuration... Current configuration : 5008 bytes! version RGOS 10…

[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置

ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…

微服务系列(一)springcloudAlibaba之Nacos注册和配置中心及openFeign远程调用

一,认识微服务 我们先看看开发大型项目采用单体架构存在哪些问题,而微服务架构又是如何解决这些问题的。 1.1 单体架构 单体架构(monolithic structure):整个项目中所有功能模块都在一个工程中开发;项目部署…

大数据安全问题有哪些类型

在物联网时代,数据已成为公司的重要资产。公司使用大数据等现代技术来收集和处理数据。凭借这些能力,大数据已经 改变了许多行业,例如医疗保健、零售和农业。大数据应用有助于公司改善业务运营并预测行业趋势。然而,这项技术可能 …

for与while的区别

for循环中,知道循环次数或者循环范围 while循环中,不知道循环的范围和次数,只知道循环的结束条件 。。。 /*山峰的高度是(8844.43米8844430毫米),假如我有一张纸,要折多少次可以达到山峰的高…

【递归搜索回溯专栏】专题一递归:快速幂

本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:递归搜索回溯专栏 🚚代码仓库:小小unicorn的代…

为HTTP而生的requests库,纵横江湖难逢敌手

目录 requests是什么安装requests使用requestsGET方法POST方法 requests的相关函数 既然Python是一门全球流行的语言,那么对于网络通信的HTTP的支持肯定也是非常的优秀的。Python中原生的urllib模块也有对HTTP的支持,虽然也可以用来发送 HTTP 请求&#…

Android开发新手入门教程,华为大神花费5个月打造的这份714页学习笔记系列

前言 成为一个专业人士是所有程序员的目标,近几年的工作经历,近距离观察了很多大公司的大佬。有幸与其中的一部分一起工作。在此分享大牛程序员的行为风格以及我自己的所思所想,希望对大家有所帮助。 特此声明:此为我个人主观观点…

SpringCloud-Hystrix熔断降级和监控

写得比较全的可以参考这篇文章:微服务——Hystrix的使用_hystrix使用-CSDN博客 Hystrix的主要功能包括: 熔断器(Circuit Breaker):通过监控对远程服务的调用,当远程服务出现问题导致失败率过高时&#xff…

python基础第二天

世界杯小组赛成绩 注意: 1.循环 1.1while 1.2for 1.3 range 1.4 while else while 循环正常执行完才能执行else语句

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 (挂载完,要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了) 解决挂载、解决挂载完重启就消失 linu…

【C++通关攻略 · 基础篇】注释

✍作者:黑洞极客 📔专栏:C:通关攻略 本篇文章将介绍 C 中的注释,有帮助的话别忘点赞收藏,关注专栏哦! 注释 注释,是程序中的解释型语言,可以提高程序的可读性。在程序中使…

推荐一款桌面端redis连接工具, redis desktop manager替代品——another redis desktop manager

下载地址 Another Redis Desktop Manager | 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值 封面对比 对比redis desktop manager ,ui上有巨大的改进 但是redis desktop ma…

华为OD机试“HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序”Java编程解答

描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序 数据范围: 1≤n≤1000 ,元素大小满足 0≤val≤100000 输入描述: 第一行输入数组元素个数 第二行输入待排序的数组,每个数用空格隔开 第三行输入一…

授权认证登录之 Cookie、Session、Token、JWT 详解

授权认证登录之 Cookie、Session、Token、JWT 详解 一、先了解几个基础概念什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials) 二、Cookie1、了解 Cookie2、cooker的创建2、coo…

嵌入式面试

1.关键字static的作用是什么?为什么static变量只初始化一次? 1)修饰局部变量:使得变量变成静态变量,存储在静态区,存储在静态区的数据周期和程序相同, 在main函数开始前初始化,在退…

C#相关热点面试题

以下是一些C#相关的热点面试题: 请解释一下C#中的LINQ(Language-Integrated Query)?它有什么优点? LINQ是C#中的一种特性,它允许使用类似于SQL的查询语句来操作内存中的数据集合,包括对象、XML、…

【刷题】双指针入门

双指针入门 双指针283.移动零1089. 复写零202. 快乐数11. 盛最多水的容器Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!! 双指针 双指针是非常经典的算法,包括但…

报错:module ‘collections‘ has no attribute ‘Iterable‘

使用python 高版本,在使用collections遇到报错:module ‘collections’ has no attribute ‘Iterable’ 查了资料 在python3.9 之后collections.Iterable被弃用了。 添加修改语句 collections.Iterable collections.abc.Iterable

保留数据的重装系统教程!(win11系统)

上车警告!!! 本教程无需思考,跟着操作一步一步来就能完成系统的重装。原理是将C盘系统重装,其他盘符数据保存。适用于系统盘重装数据或更改系统版本。 重要提示!!! C盘有重要学习资…