java - Linux : How to check a file copy has finished in my watch folder?

标签 java c linux shell

我有一个文件夹,不同的用户可以在其中放置他们的文档,例如 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/

相关文章:

linux - 查找 [主机] : no such host error in Go

java - 如何将java打印行移动到控制台窗口的顶部?

java - 当我尝试通过我的 Google Suite 帐户发送电子邮件时,Gmail API 返回 failedPrecondition 错误

java - java中的synchronized关键字

c - 如何检查我是否正确实现了 C 库函数?

c - 为什么有些 C API 不遵循封装

java - 如何将 JPanel 添加到自动生成的 netbeans JFrame 中?

java - JPA:字节数组字段的 TypedQuery

c - 在 C 中创建获取字符串函数时遇到问题

linux - 在覆盖 go 的默认信号处理程序时如何避免竞争?