传输完成后,将文件移动到另一个目录

2024-06-02 10:41:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个视频编码脚本,我想尽快运行一个文件移到一个特定的目录。在

如果我使用inotify之类的东西,如何确保文件在完成移动之前不会被编码?在

我考虑过做一些类似的事情:

  • 将(rsync)文件复制到临时目录中。在
  • 完成后,将(简单的“mv”)移到encode目录中。在
  • 让我的脚本监视编码目录。在

但是,如何使步骤2正常工作并且只运行一次1?在

我使用的是UbuntuServer11.10,我想使用bash,但是如果可以简化问题的话,可以说服我使用Python。在

我并不是将文件“下载”到这个目录中,而是在绝大多数时间内使用rsync。在

另外,这个Ubuntu服务器运行在一个虚拟机上。在

我通过NFS从FreeBSD服务器装载了我的主文件存储。在


Tags: 文件服务器目录脚本bash编码视频ubuntu
3条回答

我使用的一种技术适用于FTP。向FTP服务器发出命令,将文件传输到辅助目录。命令完成后,向服务器发送第二个命令,这一次告诉服务器将文件从aux目录重命名为最终目标目录。如果使用inotify或轮询目录时,文件名在重命名完成之前不会出现,因此,可以保证文件是完整的。在

我不熟悉rsync,所以我不知道它是否具有类似的重命名功能。在

inotifywait看起来很有前途。你必须小心一点,因为如果在设置通知之前下载完成,它将永远等待。在

inotifywait -e close_write "$download_file"
mv "$download_file" "$new_location"

最简单的方法是使用wget或{}这样的程序进行下载,直到文件下载完毕才退出。如果失败,我不确定这是否是绝对最佳的解决方案,但是您可以使用一个循环脚本,使用lsofgrep检查文件是否打开:

while lsof | grep /path/to/download >/dev/null; do sleep 5; done
mv /path/to/download /path/to/encode/dir

相关问题 更多 >