Есть ли простой способ проверить, есть ли изменения в SFTP-сервере?

Моя цель - опросить 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. Он работает "отлично", но когда на сервере слишком много файлов, для подсчета требуется несколько минут (в настоящее время требуется более 2 минут, чтобы получить счет для сервера с ~10 тыс. Файлов). Есть ли способ ускорить подсчет или другие изменения на сервере?

2 ответа

Решение

К сожалению, в протоколе SFTP нет простого способа получить изменения. Если у вас может быть запущен какой-либо демон на сервере ИЛИ если источник новых файлов может создать / обновить вспомогательный файл, то создание такого файла с последним временем изменения в его имени или содержимом может быть опцией.

Я достаточно хорошо знаю протокол SFTP, разработав коммерческие SFTP-клиенты и SFTP-сервер ( CompleteFTP), и, насколько я знаю, в протоколе нет способа получить количество файлов в каталоге без его перечисления. Некоторые серверы, такие как наш, предоставляют способы добавления пользовательских команд к серверам, которые вы можете вызывать с клиента, поэтому можно было бы добавить пользовательскую команду, которая возвращает количество файлов в каталоге. CompleteFTP также позволяет вам писать собственные файловые системы, чтобы вы могли написать такую, которая показывает только файлы, которые изменились после заданной отметки времени, когда вы делаете листинг, что может быть другим подходом. Наш сервер работает только на Windows, так что это может быть для вас показом.

Другие вопросы по тегам