要通过 SSH 使用 Python 进行文件夹的增量同步,你可以使用paramiko
库来创建 SSH 连接并执行文件传输操作。paramiko
是一个 Python 实现的 SSHv2 协议库,可以用于进行 SSH 连接、文件传输等任务。
以下是一个简单的示例,展示如何使用paramiko
进行增量同步:
import os
import paramiko
import hashlib
def calculate_md5(file_path):
"""计算文件的 MD5 哈希值"""
hash_md5 = hashlib.md5()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4服务器托管网096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
def sync_folder(local_folder, remote_folder, ssh_host, ssh_port, ssh_username, ssh_password):
"""通过 SSH 增量同步文件夹"""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ssh_host, port=ssh_port, username=ssh_username, password=ssh_password)
sftp = client.open_sftp()
# 获取本地文件夹中的所有文件
local_files = {os.path.join(local_folder, f): calculate_md5(os.path.join(local_folder, f))
for f in os.listdir(local_folder) if os.path.isfile(os.path.join(local_folder, f))}
# 获取远程文件夹中的所有文件及其哈希值
remote_files = {}
try:
remote_files_list = sftp.listdir_attr(remote_folder)
for entry in remote_files_list:
if entry.filename != '.' and entry.filename != '..' and entry.st_mode.type == paramiko.SFTP_TYPE_REGULAR:
remote_file_path = os.path.join(remote_folder, entry.filename)
remote_files[remote_file_path] = entry.st_md5
except IOError:
# 远程文件夹不存在时忽略
pass
# 同步文件
for local_file, local_md5 in local_files.items():
remote_md5 = remote_files.get(local_file, None)
if remote_md5 is None or local_md5 != remote_md5:
# 文件在远程不存在或哈希值不匹配,进行同步
print(f"Uploading {local_file} to {remote_folder}")
sftp.put(local_file, local_file.replace(local_folder, remote_folder))
sftp.close()
client.close()
# 使用示例
local_folder = "/path/to/local/folder"
remote_folder = "/path/to/remote/folder"
ssh_host = "remote_host_ip"
ssh_port = 22
ssh_username = "username"
ssh_password = "password"
sync_folder(local_folder, remote_folder, ssh_host, ssh_port, ssh_username, ssh_password)
在这个示例中,sync_folder
函数通过 SSH 连接到远程服务器,并使用paramiko
的 SFTP 功能来同步文件夹。它首先计算本地文件夹中所有文件的 MD5 哈希值,然后连接到远程服务器并获取远程文件夹中所有文件服务器托管网的哈希值。之后,它比较本地和远程文件的哈希值,如果文件在远程不存在或其哈希值不匹配,则通过 SFTP 上传文件。
请注意,这个示例使用了 MD5 哈希算法来检测文件变化,这对于大多数用途来说已经足够好了。但是,如果你需要更高的安全性或准确性,可以考虑使用更强大的哈希算法,如 SHA-256。
此外,这个示例没有处理文件夹的递归同步和删除远程存在但本地不存在的文件的情况。如果需要这些功能,你可能需要扩展此脚本以处理文件夹的递归遍历,并添加删除文件的逻辑。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
技术背景 基于链式法则的自动微分技术,是大多数深度学习框架中所支持的核心功能,旨在更加快速的进行梯度计算,并且可以绕开符号微分的表达式爆炸问题和手动微分的困难推导问题。本文主要基于MindSpore框架,记录一下几种自动微分的使用技巧。MindSpore版本信…