我正在使用pysftp库的get_r
函数(https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get_r)从sftp服务器获取目录结构的本地副本。
对于远程目录内容发生变化的情况,这是正确的方法吗?我想只获取自上次运行脚本以来发生更改的文件?
该脚本应该能够递归地同步远程目录并镜像远程目录的状态 - f.e.使用参数控制是否应删除本地过时的文件(远程服务器上不再存在的文件),并且应该获取对现有文件和新文件的任何更改。
使用示例:
from sftp_sync import sync_dir
sync_dir('/remote/path/', '/local/path/')
答案 0 :(得分:1)
使用pysftp.Connection.listdir_attr
获取包含属性的文件列表(包括文件时间戳)。
然后,迭代列表并与本地文件进行比较。
import os
import pysftp
import stat
with pysftp.Connection('example.com', username='username', password='password') as sftp:
sftp.cwd("/remote/path")
for f in sftp.listdir_attr():
if not stat.S_ISDIR(f.st_mode):
print("Checking %s..." % f.filename)
if ((not os.path.isfile(f.filename)) or
(f.st_mtime > os.path.getmtime(f.filename))):
print("Downloading %s..." % f.filename)
sftp.get(f.filename, f.filename)