2013-02-09 171 views
3

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

我的挑战是,我需要检测:

1),一个新的文件存在。 2)上传过程/传输完成。

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

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

THX &欢呼声, 彼得

回答

2

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

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

0

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

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

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

0

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

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

干杯!