哪个inotify事件表示大文件操作完成?

时间:2010-05-24 06:36:06

标签: python inotify pyinotify

对于大文件或慢速连接,复制文件可能需要一些时间。

使用pyinotify,我一直在关注IN_CREATE事件代码。但这似乎发生在文件传输的 start 。我需要知道文件什么时候被完全复制 - 如果它只有一半那么它就没用了。

当文件传输完成并完成时,会触发什么inotify事件?

3 个答案:

答案 0 :(得分:12)

IN_CLOSE 可能表示写入已完成。这是不确定的,因为有些应用程序是不好的演员,并且在使用它们时不断打开和关闭文件,但是如果你知道你正在处理的应用程序(文件传输等)并理解它的'行为,你就是可能很好。 (注意,这并不意味着传输成功完成,显然,它只是意味着打开文件句柄的进程关闭了它。)

IN_CLOSE同时捕获IN_CLOSE_WRITEIN_CLOSE_NOWRITE,因此请自行决定是否要抓住其中一个。 (你可能想要它们 - WRITE/NOWRITE与文件权限有关,而不是实际是否有任何写入。

Documentation/filesystems/inotify.txt中有更多文档(虽然令人讨厌,而不是信息)。

答案 1 :(得分:1)

对于我的情况,我想在文件完全上传后执行脚本。我正在使用WinSCP编写扩展.filepart的大文件,直到完成。

我首先开始修改我的脚本以忽略文件,如果它们本身以.filepart结尾,或者如果另一个文件存在于同一目录中且名称相同但扩展名为.filepart,那么这意味着上传尚未完全完成。

然后我注意到在上传结束时,当所有部分都已完成时,我会触发IN_MOVED_IN通知,这有助于我在我想要的时候运行我的脚本。

如果您想知道文件上传器的行为方式,请将其添加到incrontab:

/your/directory/ IN_ALL_EVENTS echo "$$ $@ $# $% $&"

然后

tail -F /var/log/cron

并监控所有被触发的事件,以找出最适合您的事件。

祝你好运!

答案 2 :(得分:0)

为什么不在传输结束时添加虚拟文件?您可以在虚拟对象上使用IN_CLOSE或IN_CREATE事件代码。重要的是假人要被转移为序列中的最后一个文件。

我希望它会有所帮助。