5

我正在使用 pysftp 库的get_r函数(https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get_r)从 sftp 服务器获取目录结构的本地副本。

对于远程目录的内容已更改并且我只想获取自上次运行脚本以来更改的文件的情况,这是正确的方法吗?

该脚本应该能够递归同步远程目录并镜像远程目录的状态 - fe 带有一个参数,用于控制是否应该删除本地过时的文件(那些不再存在于远程服务器上的文件),以及对应该获取现有文件和新文件。

我目前的方法是here。

示例用法:

from sftp_sync import sync_dir

sync_dir('/remote/path/', '/local/path/')
4

1 回答 1

10

使用pysftp.Connection.listdir_attr获取带有属性的文件列表(包括文件时间戳)。

然后,迭代列表并与本地文件进行比较。

import os
import pysftp
import stat

remote_path = "/remote/path"
local_path = "/local/path"

with pysftp.Connection('example.com', username='user', password='pass') 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)
            local_file_path = os.path.join(local_path, f.filename)
            if ((not os.path.isfile(local_file_path)) or
                (f.st_mtime > os.path.getmtime(local_file_path))):
                print("Downloading %s..." % f.filename)
                sftp.get(f.filename, local_file_path)
于 2018-02-02T07:42:11.933 回答