检测到SFTPfile upload已完成

我有一个SFTP服务器(debian ssh服务器),远程用户上传一个大文件到一个特定的目录。

我的挑战是我需要检测:

1)存在新文件。

2)上传过程/传输完成。

什么是最好的方法来做到这一点? 也许已经有一些可用的工具了?

按照逻辑思维,我可能会在第一阶段检测到目录中存在新文件。 然后在第二阶段,然后循环/等待,直到用户SFTP断开连接! 之后我可以开始下一个过程

Thx和欢呼声,彼得

对于问题1),您可以使用inotify API来查看目录中的更改。 你不会说你使用哪种编程语言。 在Perl中,您可以使用Python Linux::Inotify pynotify Linux::Inotify

对于问题2),一种方式是等到ssh会话断开连接,另一种是也使用inotify来查看文件关闭通知。

我有类似的情况。 尽管我使用了JSCH,但是这种方法可能有所帮助。

你可以用一些临时的扩展名来上传文件。 例如bigFile.txt.temp 。 一旦文件上传, 将其重命名为所需的文件名,即bigFile.txt,并删除临时文件。 JSCH ChannelSftp 。 在JSCH中,rename只保留一个文件。 所以你不需要明确地删除临时文件。

在上传任何较新版本的文件之前,检查是否存在临时文件 – bigFile.txt.temp。 如果存在,则表示该文件正在上传。 设置回复代码或等待会话断开连接。

在我的使用案例中,足以查看是否有任何用户通过SFTP连接。 如果是这样,我会简单地考虑所有文件锁定。

这可以通过ps -ef命令完成(在Linux / OpenSSH中)。

干杯!