繁体   English   中英

Linux:如何检查我的监视文件夹中的文件副本是否已完成?

[英]Linux : How to check a file copy has finished in my watch folder?

我有一个文件夹,不同的用户可以在其中放置他们的文档,如 pdf、tif 等。如果有任何新文件,我每分钟都会检查这个文件夹,如果有,那么我选择该文件进行处理。

但是,我不想选择这个文件,以防它仍在被复制。 在这种情况下,我会在未来的周期中选择它。

但我面临的问题是。 那如何检查我的文件夹中的文件复制是否已完成?

我已经尝试过以下事情。 1) 尝试使用 C 程序以写入模式打开文件。 但是即使它仍在被复制,我也可以以写入模式打开它。

2) 使用 lsof 命令来检查某个进程是否与此相关联。 但是这个命令在非 root 用户的情况下不会给出结果。

注意:我可能是 Linux 上的非 root 用户。

您可以使用内核的inotify工具来监听 IN_CLOSE_WRITE 事件。 复制完成后,程序关闭文件句柄,进而触发此事件。

IN_CLOSE_WRITE (+)
为写入而打开的文件已关闭。

有几个示例如何从 shell 中使用它,例如这里

在此处与 C 一起使用的示例

在大多数情况下,如果文件有一段时间没有被修改,假设副本已经完成就足够了。 仅处理过去 15 分钟未修改的文件:

find . -mmin +15

正确的解决方案将要求所有程序都遵守某种锁定:

https://linux.die.net/man/2/flock

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM