0

我已经设置了一个 SFTP 服务器和一些我想在文件准备好时启动的触发器。

万一我在完成之前就开始了,或者如果连接出现错误,我会先写入一个tmp文件夹(使用 SFTP 协议),然后将其复制到一个new文件夹中。

我正在使用 inotify 跟踪一个文件夹和另一个文件夹中的所有事件:

inotifywait -m --format '%:e %f' new
inotifywait -m --format '%:e %f' tmp

在 tmp 文件夹中写入文件的事件是:

CREATE newFile
OPEN newFile
ATTRIB newFile
MODIFY newFile
MODIFY newFile
MODIFY newFile

我注意到,如果我将文件从一个文件夹从 bash 移动到另一个文件夹:

mv tmp/newFile new

MOVE_TO触发了一个事件。在 tmp 文件夹中:

CLOSE_WRITE:CLOSE newFile
MOVED_FROM newFile

在新文件夹中:

MOVED_TO newFile

但是,如果我通过 SFTP 使用 RENAME 方法移动文件,则不会。这些是所有触发的事件:

在 tmp 文件夹中:

CLOSE_WRITE:CLOSE newFile
DELETE newFile

在新文件夹中:

CREATE newFile
OPEN newFile
ACCESS newFile
CLOSE_NOWRITE:CLOSE newFile

这是 SFTP 协议的一部分吗?是否可以在 sftp 中移动文件并实际触发 MOVED_TO 事件?

这是我正在使用的 sftp 客户端的实现: https ://github.com/mscdex/ssh2-streams/blob/55fd9c36b6dca8dbf0588a1d6f450b85c784dc72/lib/sftp.js 我正在使用 openssh-sftp-server 作为服务器

4

0 回答 0