Python 传输完成后,将文件移动到另一个目录
我有一个视频编码脚本,我希望在文件移动到特定目录后立即运行该脚本 如果我使用类似inotify的东西,如何确保文件在移动完成之前不会被编码 我考虑过做一些类似的事情:Python 传输完成后,将文件移动到另一个目录,python,bash,ubuntu,file-monitoring,Python,Bash,Ubuntu,File Monitoring,我有一个视频编码脚本,我希望在文件移动到特定目录后立即运行该脚本 如果我使用类似inotify的东西,如何确保文件在移动完成之前不会被编码 我考虑过做一些类似的事情: 将(rsync)文件复制到临时目录中 完成后,将(简单的“mv”)移动到encode目录中 让我的脚本监视编码目录 但是,如何使步骤2正常工作,并且只在步骤1完成后运行一次 我正在使用UbuntuServer11.10,我想使用bash,但如果可以简化问题,我可能会被说服使用Python 我不是“下载”文件到这个目录,本身;相
- 将(rsync)文件复制到临时目录中
- 完成后,将(简单的“mv”)移动到encode目录中
- 让我的脚本监视编码目录
我通过NFS从FreeBSD服务器装载了主文件存储。最简单的方法是使用类似于
wget
或curl
的程序进行下载,直到文件下载完成后才会退出。如果做不到这一点,我不确定这是否是绝对最佳的解决方案,但您可以使用循环脚本,使用lsof
和grep
检查文件是否打开:
while lsof | grep /path/to/download >/dev/null; do sleep 5; done
mv /path/to/download /path/to/encode/dir
inotifywait
看起来很有希望。您必须稍微小心,因为如果在设置通知之前下载完成,它将永远等待
inotifywait -e close_write "$download_file"
mv "$download_file" "$new_location"
我使用的一种技术适用于FTP。向FTP服务器发出命令,将文件传输到辅助目录。命令完成后,您将向服务器发送第二个命令,这一次告诉服务器将文件从aux目录重命名为最终目标目录。如果您正在使用inotify或轮询目录,则在重命名完成之前,文件名不会出现,因此,您可以确保文件完整
我不熟悉rsync,因此我不知道它是否具有类似的重命名功能。这在紧急情况下应该可以工作,但如果可能的话,我希望避免轮询。rsync的工作方式是相同的-文件在传输完成之前不会显示在要编码的文件列表中。