检测SFTP文件上传已完成

6
我有一个SFTP服务器(debian ssh服务器),远程用户偶尔会将一个大文件上传到特定目录。
我的挑战是需要检测:
1)是否有新文件存在。
2)上传过程/传输是否完成。
最好的方法是什么?也许已经有一些可用的工具?
从逻辑上思考,可能可以在第一阶段检测到目录中是否存在新文件。然后,在第二阶段循环/等待直到用户SFTP断开连接!之后我可以启动下一个进程...
谢谢!
3个回答

3
对于问题1),您可以使用inotify API来监视目录的更改。您没有说明使用哪种编程语言。在Perl中,您将使用Linux::Inotify,在Python中使用pynotify
对于问题2),一种方法是等待ssh会话断开连接,另一种方法是还使用inotify来监视文件关闭通知。

0

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

您可以使用一些临时扩展名上传文件,例如bigFile.txt.temp。一旦文件上传完成,重命名为所需的文件名,即bigFile.txt并删除临时文件。 JSCH ChannelSftp。在JSCH中,重命名可以保留一个文件。因此,您无需显式删除临时文件。

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


0
在我的使用情况下,只需要查看是否有任何用户通过SFTP连接。如果是这样,我将简单地认为所有文件都被锁定了。
这可以通过Linux/OpenSSH中的ps -ef命令来完成,方法如此处所述。
干杯!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接