我有一个文件夹,不同的用户可以在其中放置他们的文档,例如 pdf、tif 等。 我每分钟都会检查这个文件夹是否有任何新文件,如果有,那么我选择该文件进行处理。
但是,我不想选择这个文件,以防它仍在被复制。 在这种情况下,我会在未来的周期中选择它。
但我面临的问题是。 那我如何检查我的文件夹中的文件复制是否已经完成?
我已经尝试过以下操作。 1) 尝试使用 C 程序以写入模式打开文件。 但即使仍在复制,我也可以以写入模式打开它。
2) 使用 lsof 命令检查是否有某个进程与此关联。 但在非 root 用户的情况下,此命令不会给出结果。
注意:我可能是 Linux 上的非 root 用户。
最佳答案
您可以使用内核的inotify监听 IN_CLOSE_WRITE 事件的工具。 复制完成后,程序关闭文件句柄,从而触发此事件。
IN_CLOSE_WRITE (+)
File opened for writing was closed.
有几个示例如何从 shell 中使用它,例如 here
使用 C 的示例 here
关于java - Linux : How to check a file copy has finished in my watch folder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696096/