The Right Way to do this is to cause the process writing the files to and rename or move them of its own volition when done with the write. Anything else is prone to race conditions and/or permission problems.
Some particular examples of problem cases:
- If the process moving the files runs as a different user than lsof / fuser / etc, the information isn't guaranteed complete
- If the process doing the write is a shell script, it may spawn a subprocess which opens the file, let it be closed, spawn another subprocess, etc. In this scenario lsof, fuser and similar tools could legitimately show the file as not being accessed even if further subprocess will be started to write to it later.
Other, more subtle race conditions may exist as well -- and regardless, lsof, fuser and such are not POSIX tools and not available everywhere.
Require as a matter of the protocol that the processes writing the files move them into the final location on completion themselves; it's the only safe and portable approach.
EDIT: It has been clarified that the files are being written not by an arbitrary process (which may close and re-open them) but by an FTP server. In this case, incron can be used to run an arbitrary script whenever a file has been closed in this directory.