当前位置: 首页 > 面试题库 >

如何使用pysftp仅同步远程目录中更改的文件?

闾丘诚
2023-03-14
问题内容

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

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

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

我当前的方法在这里。

用法示例

from sftp_sync import sync_dir

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

问题答案:

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

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

import os
import pysftp
import stat

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

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)
            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)


 类似资料:
  • 问题内容: 我发布了有关使用Paramiko收到的持续错误消息的上述问题。我认为这与我的下一个问题无关,但可能与之相关。 我可以使用Paramiko通过SSH成功​​连接到服务器。我可以执行ls或pwd之类的命令。我似乎无法做的是更改目录。例如,我可以发送命令“ cd ..”,但是当我跟进“ pwd”时,它表明我尚未更改目录。它仅列出我登录时所在的初始目录。 我误会了这里发生了什么吗?我应该不能更

  • 本文向大家介绍Drupal 9中的配置同步目录设置更改,包括了Drupal 9中的配置同步目录设置更改的使用技巧和注意事项,需要的朋友参考一下 Drupal版本8.8.0中保留的一项更改,而8.8.0更改说明中未提及,这是对控制配置目录位置的设置的微小更改。该更改已从settings.php文件中弃用$config_directories设置,并将配置移至$settings数组中。您可以在Drup

  • 问题内容: 我是初学者,我在Java中找到了有关lastmodified文件的旧线程。我想要的是从一个目录中仅获取10个最近的文件,并将它们移动到另一个目录。 在该论坛中找到的这段代码运行良好,但是它从目录中获取所有文件并按日期对它们进行排序。 任何帮助将不胜感激,谢谢 这是代码: 我是初学者,很抱歉,如果使用该论坛犯了一些错误。 所以对我来说,我不知道如何在新代码中插入以上内容。 如果我保留第一

  • 在微力同步目录界面中,您可以看到目录的同步状态、文件大小、正在进行的传输和速度、文件夹路径、扫描时间等信息。 3.2.1.1. 同步中的文件夹 同步目录中显示的是您正在同步中的文件夹列表,以及它们的状态、同步的设备、文件大小、正在进行的传输和速度信息,点击目录列表即可展开查看该目录的更多详细信息,如下: 文件夹图标根据是否开启选择性同步和目录的读写权限不同,图标共分为5种,如下所示: [图片丢失]

  • 我想使用POJO作为源来更新JOOQ记录中更改的字段<代码>记录。from(Object)几乎正确,但根据文档 结果记录的所有值的内部“更改”标志都将设置为true。 我只希望实际更改的字段(由对象决定。等于(对象,对象))更新其标志。 这有两个原因: 我不想触发插入

  • 问题内容: 如何在Netbeans 6.9中更改Java SE \ ME \ EE的默认项目目录? 问题答案: 我认为您无法将其设置为特定于模块,但可以将其设置如下: 关闭NetBeans 查找文件。对我来说(Windows) 该变量我想你想改变什么。