4

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

我的挑战是我需要检测:

1) 存在一个新文件。

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

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

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

谢谢,干杯,彼得

4

3 回答 3

3

对于问题 1),您可以使用inotifyAPI 来监视目录的更改。你没有说你使用哪种编程语言。在 Perl 中,您将Linux::Inotify在 Python 中使用 , pynotify

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

于 2013-02-09T11:28:27.890 回答
0

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

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

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

于 2013-02-18T17:59:59.627 回答
0

在我的用例中,查看当前是否有任何用户通过 SFTP 连接就足够了。如果是这样,我会简单地认为所有文件都被锁定。

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

干杯!

于 2014-01-31T11:39:33.557 回答