2013-03-28 36 views
0

我有一段代碼監視一個文件夾。如果一個文件在那裏停留3分鐘,我的代碼將會處理它。這取決於mtime來判斷它是否從現在起3分鐘。linux cp mtime change

但是,我發現,當我CP一個巨大的文件,讓我們說10GB,是無法完成在3分鐘內,該代碼將打破,因爲CP似乎並沒有更新的mtime不時當它複製

我觀察到cp的正確行爲嗎?

有什麼解決辦法嗎?

感謝,

+0

你能否澄清一下cp命令的用途?將文件複製到進程目錄中,然後進行處理? – suspectus

+1

假設你沒有控制雙方。 [inotify at wikipedia](http://en.wikipedia.org/wiki/Inotify)[man inotify](http://linux.die.net/man/7/inotify)。 –

回答

2

有很多變通的

  • 複製到一個dotfile,然後將其移動到位,一旦複製完成 - 這將在創建過程中完成的,只有處理非文件夾中的點文件。
  • 使用的信號,表明客戶端已經完成複製(可能是唯一可行的非網絡文件系統)
  • 使用的文件的大小和該mtime,如果在3分鐘內既不增加,則與繼續處理。
2

爲了我所知,在上述修改完成時mtime會被更新。我認爲這樣做是正確的。爲什麼你需要知道一個文件是否被更新,而它被複制到?如果您碰巧複製該文件,則最終會得到一個不完整的文件,可能會無用。

但是,如果你的心是明確的,確保你的複製智能,不僅取決於上面的答案建議的mtime,而且還取決於文件大小。如果您看到文件大小以任何方式更改,無論mtime如何說明,都可以確定該文件已被修改,與上次處理時相比。

+0

更好的是,使用'inotify'作爲@artlessnoise評論... –