请澄清close_write
ionotifywait 事件是否能保证文件已完全写入。
这种情况是文件传输程序将文件X发送到远程服务器Z,并且需要通过监视Z上的X,当文件完全传输时移动X。我们不知道传输何时发生,因此需要监视。
bash 脚本 inotifywait 等待文件完全写入后再继续表示close_write
告诉文件已完全写入。
检查这两个文件是否是的最好方法是什么完全写完
正如 pacholik close_write 所指出的,仅事件选项就足够了:
inotifywait -m -e close_write $1 | while read line
然而,手册页说并不一定意味着文件被写入。
关闭写入
监视的文件或监视目录中的文件在以可写模式打开后被关闭。这确实不一定意味着文件已写入。
答案1
最后一段强调了这样一个事实:该close_write
事件仅指示文件描述符已关闭,并且它是以可写模式打开的;它没有说明打开事件和关闭事件之间发生的任何事情。因此一个过程在做
fd = open("/path/to/foo", O_RDWR);
close(fd);
会触发一个close_write
事件。
本质上,如果您想知道文件已修改以及修改已完成,则必须监视modify
和close_write
(或close
)事件。
在您的场景中,close_write
这就足够了:一旦文件关闭,任何后续的读取都将产生写入该文件的所有数据,并且修改它的原始进程不能再这样做(无需重新打开它)。这不意味着所有数据都在磁盘上,它可能仍在缓存中;但读取它的进程会看到所有数据。