检测SFTP文件上传完成

时间:2013-02-09 10:41:50

标签: linux ssh ftp debian sftp

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

我的挑战是我需要检测:

1)存在新文件。

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

最好的方法是什么?也许已经有一些工具可用于此?

逻辑上我认为我可以在第一阶段检测到目录中存在新文件。然后在第二阶段循环/等待,直到用户SFTP断开连接!?之后我可以解雇下一个过程...

Thx&干杯, 彼得

3 个答案:

答案 0 :(得分:2)

对于问题1),您可以使用inotify API来查看目录以进行更改。您没有说出您使用的编程语言。在Perl中,您将在Python Linux::Inotify中使用pynotify

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

答案 1 :(得分:0)

我遇到了类似的情况。虽然我使用了JSCH,但这种方法可能有所帮助。

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

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

答案 2 :(得分:0)

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

这可以通过ps -ef命令以here描述的方式完成(在Linux / OpenSSH中)。

干杯!