鲜花网站开发与设计,在深圳注册公司需要什么资料,重庆网站建设网搜科技,顾问在Python中实现Windows两个服务器之间的文件夹同步#xff0c;包括文件新增、修改和删除的同步#xff0c;可以使用paramiko库进行SSH连接以及SFTP传输#xff0c;并结合文件大小和时间戳判断文件是否发生过变化。以下是包含删除文件同步逻辑的完整脚本示例#xff1a;
im…在Python中实现Windows两个服务器之间的文件夹同步包括文件新增、修改和删除的同步可以使用paramiko库进行SSH连接以及SFTP传输并结合文件大小和时间戳判断文件是否发生过变化。以下是包含删除文件同步逻辑的完整脚本示例
import os
import paramiko# 定义源与目标服务器信息
src_host source_server_ip
src_user source_username
src_password source_password
src_folder /path/to/source/folderdst_host destination_server_ip
dst_user destination_username
dst_password destination_password
dst_folder /path/to/destination/folderdef 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: # 文件存在时比较大小和时间戳dst_stat sftp_dst.stat(dst_item_path)if src_name.st_size ! dst_stat.st_size or src_name.st_mtime ! dst_stat.st_mtime:# 大小或时间戳不同更新文件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, usernamesrc_user, passwordsrc_password)ssh_dst.connect(dst_host, usernamedst_user, passworddst_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()
这个脚本首先遍历源文件夹中的所有文件和子目录并根据文件状态进行相应操作。接着它会检查目标文件夹中是否存在源文件夹中已经删除的文件并执行删除操作以保持两台服务器上的文件内容一致。
遇到问题
AttributeError: ‘SFTPClient‘ object has no attribute ‘exists‘问题解决-CSDN博客