我已经设置了一个 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 作为服务器