1

我有一段代码监视文件夹。如果一个文件在那里停留 3 分钟,我的代码将处理它。从现在开始是否已经过了 3 分钟,这取决于 mtime。

但是,我发现当我 cp 一个巨大的文件时,比如说 10GB,它无法在 3 分钟内完成,代码会中断,因为cp 在复制时似乎不会不时更新 mtime

我观察到 cp 的正确行为了吗?

有什么解决办法吗?

谢谢,

4

2 回答 2

3

据我所知,当上述修改完成时,mtime 会更新。我认为这样做是正确的。为什么在将文件复制到时需要知道文件是否已更新?如果你碰巧复制了那个文件,你最终会得到一个不完整的文件,可能没用。

但是,如果您确定要这样做,请确保您的复制智能,不仅取决于 mtime,还取决于上面答案中建议的文件大小。如果您看到文件大小以任何一种方式发生变化,无论 mtime 说什么,您都可以确定该文件已被修改,相对于上次处理它的时间。

于 2013-03-29T00:23:17.103 回答
2

有很多解决方法

  • 复制到点文件中,然后在复制完成后将其移动到位 - 这将由创建过程完成,并且仅处理文件夹中的非点文件。
  • 使用信号指示客户端已完成复制(可能仅适用于非网络文件系统)
  • 使用文件的大小mtime和如果在 3 分钟内都没有增加,则继续处理。
于 2013-03-28T23:27:27.053 回答