Правильный способ сделать это - заставить процесс записывать файлы и переименовывать или перемещать их по собственному желанию, когда завершается запись. Все остальное подвержено гоночным условиям и / или проблемам с разрешениями.
Некоторые конкретные примеры проблемных случаев:
- Если процесс перемещения файлов выполняется от имени другого пользователя, нежели lsof / fuser / etc, информация не гарантируется завершенной
- Если процесс, выполняющий запись, является сценарием оболочки, он может порождать подпроцесс, который открывает файл, позволяет ему закрыться, порождает другой подпроцесс и т.д. В этом сценарии lsof, fuser и аналогичные инструменты могут на законных основаниях показать, что файл не доступен даже если будет запущен дальнейший подпроцесс, чтобы написать в него позже.
Могут существовать и другие, более тонкие условия гонки - и, тем не менее, lsof, fuser и т.п. не являются инструментами POSIX и доступны не везде.
В соответствии с протоколом требуется, чтобы процессы, записывающие файлы, перемещали их в конечное местоположение по завершении самостоятельно; это единственный безопасный и портативный подход.
РЕДАКТИРОВАТЬ: было выяснено, что файлы пишутся не произвольным процессом (который может закрыть и повторно открыть их), а FTP-сервером. В этом случае incron может использоваться для запуска произвольного скрипта всякий раз, когда файл закрыт в этом каталоге.