2016-09-29 63 views
0

我使用通过ftp复制的服务器(Synology NAS),来自CCTV系统录像机的视频剪辑。当文件被复制,小脚本转换它从DAV格式为AVI,使用下面的语句:如何获取该文件仍然对ftp打开的信息

find ./ -type f -name "*.dav" -exec ffmpeg -y -i {} -vcodec copy -movflags +faststart {}.avi \; 

的问题是,有来自CCTV录像机至Synology不断发送大量的剪辑。这是许多剪辑同时从录像机传输到Synology。所以上面的声明将尝试转换即使传输尚未结束的剪辑。如何从转换中排除此类非完整剪辑?我无法使用“inotify”或“lsof”功能,因为Synology Linux中没有这种设备(由于许多原因,我无法在Synology上安装软件)。我认为有必要知道,特定的文件仍然可以写入,并将其排除在外以供连续使用。任何想法该怎么办?

+0

您可能会检查/ proc/PID/fd文件,您的进程已打开,请参阅http://unix.stackexchange.com/a/66273。另一种方法可能是使用'stat -c%y file'命令中的修改日期,并等待它停止更改。 –

回答

0

最后我解决了我的问题。单个视频剪辑的大小小于10MB。因此,sigle文件的转换时间最多不超过1分钟。正因为如此,我添加了find命令,修改时间作为参数。它解决了我的问题。我遇到的所有问题都是因为Synology Linux的功能有限。参见下面的新命令语法:

find ./ -type f -mmin +10 -name "*.dav" -exec ffmpeg -y -i {} -vcodec copy -movflags +faststart {}.avi \; 

注意,如果文件的最后10分钟内没有修改,这意味着传输过程结束,在我的应用程序的现实(CCTV视频剪辑收集),这是没有必要的检查是该文件是否打开。

相关问题