有没有一种简单的方法来检查 SFTP 服务器是否有变化?

Is there a simple method to check if there are changes in a SFTP server?

我的objective 是轮询SFTP 服务器进行更改。我的第一个想法是检查目录中的文件数是否发生了变化。然后可能对目录中的更改进行一些额外的检查。

目前我使用的是:

try {
        FileSystemOptions opts = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
        SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
        SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 60000);

        FileSystemManager manager = VFS.getManager();
        FileObject remoteFile = manager.resolveFile(SFTP_URL, opts);

        FileObject[] fileObjects = remoteFile.getChildren();
        System.out.println(DateTime.now() + " --> total number of files: " + Objects.length);
        for (FileObject fileObject : fileObjects) {
            if (fileObject.getName().getBaseName().startsWith("zzzz")) {
                System.out.println("found one: " + Object.getName().getBaseName());
            }
        }
} catch (Exception e) {
        e.printStackTrace();
}

这是使用 apache commons vfs2 2.2.0。它工作 "fine",但是当服务器有太多文件时,它需要几分钟才能获得计数(目前,它需要超过 2 分钟才能获得具有约 10k 文件的服务器的计数)。有什么方法可以更快地获取服务器上的计数或其他更改?

遗憾的是,SFTP 协议中没有获取更改的简单方法。如果你可以在服务器上有一些守护进程 运行 或者如果新文件的源可以 create/update 一个帮助文件,创建这样的文件的名称或内容中的最后修改时间可以是一个选项.

我对 SFTP 协议相当了解,开发了商业 SFTP 客户端和 SFTP 服务器 (CompleteFTP),据我所知,协议中没有办法获取文件中的文件数目录而不列出它。一些服务器,比如我们的服务器,提供了向服务器添加自定义命令的方法,您可以从客户端调用这些命令,因此可以添加一个自定义命令,该命令 returns 目录中的文件数。 CompleteFTP 还允许您编写自定义文件系统,因此您可以编写一个只显示在给定时间戳后更改的文件的列表,这可能是另一种方法。不过,我们的服务器仅在 Windows 上运行,因此这对您来说可能是个阻碍。