我有一个视频编码脚本,我想在文件移动到特定目录后立即运行。
如果我使用像inotify这样的东西,我如何确保文件在完成移动之前不进行编码?
我考虑过这样做:
但是,如何让第2步正常工作,只在#1完成后运行?
我正在使用Ubuntu Server 11.10并且我想使用bash,但如果能够简化问题,我可以说服我使用Python。
我不是"下载"文件到这个目录本身;相反,我绝大部分时间都会使用rsync。
此外,此Ubuntu服务器正在VM上运行。
我通过NFS从FreeBSD服务器安装了我的主文件存储。
答案 0 :(得分:2)
最简单的方法是使用wget
或curl
之类的程序下载,直到文件下载完毕才会退出。如果做不到这一点,我不确定它是否是绝对最佳解决方案,但您可以使用循环脚本,使用lsof
和grep
检查文件是否已打开:
while lsof | grep /path/to/download >/dev/null; do sleep 5; done
mv /path/to/download /path/to/encode/dir
答案 1 :(得分:1)
我使用的一种技术适用于FTP。您向FTP服务器发出命令以将文件传输到辅助目录。命令完成后,您将第二个命令发送到服务器,这次告诉它将文件从aux目录重命名为最终目标目录。如果您使用inotify或轮询目录,则不会出现文件名直到重命名完成,因此,您可以保证文件已完成。
我不熟悉rsync所以我不知道它是否具有类似的重命名功能。
答案 2 :(得分:0)
inotifywait
看起来很有希望。你必须要小心,因为如果下载在通知设置之前完成,它将永远等待。
inotifywait -e close_write "$download_file"
mv "$download_file" "$new_location"