Erlang';s ssh_sftp库提供了一种侦听目录更改的方法?

Erlang';s ssh_sftp库提供了一种侦听目录更改的方法?,erlang,elixir,Erlang,Elixir,我需要观看或收听SFTP服务器上的文件夹中的任何更改。在将来的某个特定时间(我不知道什么时候),文件夹将被更新为一个文件。我如何在该文件夹上设置侦听器或监视程序,以便知道它何时有该文件,而不是每分钟ping一次?Erlang的ssh\u sftp模块是否提供了此功能?sftp和FTP协议都没有任何机制通知客户端远程文件夹中的更改。检测更改的唯一解决方案是定期枚举远程目录树并找出差异 Ref:我不知道您是否还需要它,但我已经实现了您所需要的。由于法律协议,我将无法共享代码,但是我可以提示您实现它的

我需要观看或收听SFTP服务器上的文件夹中的任何更改。在将来的某个特定时间(我不知道什么时候),文件夹将被更新为一个文件。我如何在该文件夹上设置侦听器或监视程序,以便知道它何时有该文件,而不是每分钟ping一次?Erlang的
ssh\u sftp
模块是否提供了此功能?

sftp和FTP协议都没有任何机制通知客户端远程文件夹中的更改。检测更改的唯一解决方案是定期枚举远程目录树并找出差异


Ref:

我不知道您是否还需要它,但我已经实现了您所需要的。由于法律协议,我将无法共享代码,但是我可以提示您实现它的方法

要求:只要文件到达目录,就运行函数,而不是按定义的间隔轮询目录,以提高处理效率

步骤1:以sftp作为子系统启动ssh守护进程

{ok, Pid} = ssh:daemon(Port, [{user_passwords, [{User, Pass}]},
                              {system_dir, SystemDir},
                              {user_dir, UserDir},
                              {key_cb, cac_auth},
                              {shell, {cacsftpd_server, display_info, []}},
                              {subsystems, [ssh_sftpd:subsystem_spec([{cwd, 
                               Home}, {file_handler, sftpd_file_handler}])]}])

步骤2:在sftpd_文件_处理程序中,您可以在文件完全传输后应用触发器调用所需的处理程序;))

虽然不是在Erlang中,而是在Elixir中,请看:

基本位是写入功能:

defmodule Exsftpd.SftpFileHandler do
...

  def write(io_device, data, state) do
    {:file.write(io_device, data), state}
    my_custom_function(state)
    {:ok, state}
  end

...
end
在这里,您可以在将内容写入(或代替)文件系统后调用所需的任何函数

按如下方式初始化服务器:(有关更详细的示例,请参阅):


这不是执行此操作的
ssh\u sftp
模块的角色。你可以阅读这篇相关的文章。
:ssh.daemon(2222,
    system_dir: '/tmp/ssh',
    subsystems: [
      Exsftpd.SftpdChannel.subsystem_spec(
        file_handler: {Exsftpd.SftpFileHandler, []}
      )
    ],
    user_dir: '/tmp/ssh/users'
  )