inotify:如何在传输完成后通知目录中的新文件

inotify : How to be notified of new files in the directory after they are complete in transfer?

本文关键字:新文件 文件 通知 传输 inotify      更新时间:2023-10-16

文件从machine1/dir1复制到machine2/dir2。我在dir2上为创建的任何新文件添加了一个inotify手表。现在,如果文件很大,可能需要几秒钟的时间才能完全放到新机器上。如果我没有错,inotify会在检测到事件后立即通知应用程序。因此,如果必须检查文件状态,应该如何进行?

用临时文件名保存下载的文件(或保存到其他目录),并在文件成功移动时将其重命名为预期文件名。

例如,Nginx使用此方法存储缓存的数据缓存数据首先写入临时文件,然后移动到缓存目录中的最终位置。执行廉价的原子重命名系统调用而不是完整的文件副本因此最好在两个位置使用相同的文件系统

没有办法回答这个问题,因为它取决于应用程序环境和需求。它可能会看到文件已经60秒没有被修改了。可能需要每隔几秒钟检查一次。这取决于情况。

如果IN_CLOSE_WRITE只是从一台机器到另一台机器的scp,则使用它有效。否则,这取决于文件从一台机器上传到另一台机器的方式。如果是一次打开和关闭,则IN_close_WRITE是执行此操作的方法。

以上两个答案都有意义,这取决于我们如何做。