【发布时间】:2015-04-21 11:17:22
【问题描述】:
我正在使用 fswatch 监控目录并在将视频文件复制到该目录时运行脚本:
fswatch -o /Path/To/Directory/Directory | xargs -n 1 sh /Path/To/Script/Script.sh
问题是在执行脚本之前文件通常没有完成其副本。这些文件是不同大小的视频文件。小文件可以,大文件不行。
如何在文件完成复制之前延迟 fswatch 通知?
【问题讨论】:
我正在使用 fswatch 监控目录并在将视频文件复制到该目录时运行脚本:
fswatch -o /Path/To/Directory/Directory | xargs -n 1 sh /Path/To/Script/Script.sh
问题是在执行脚本之前文件通常没有完成其副本。这些文件是不同大小的视频文件。小文件可以,大文件不行。
如何在文件完成复制之前延迟 fswatch 通知?
【问题讨论】:
首先,fswatch“监视器”的行为是特定于操作系统的:在询问有关 fswatch 的问题时,您最好指定您使用的操作系统。
但是,单独使用fswatch 是无法做到这一点的。一个进程可能会打开一个文件进行写入,并将其保持打开足够长的时间,以便操作系统发送多个事件。恐怕fswatch对此无能为力。
另一种方法可能是使用另一个工具来检查修改后的文件当前是否打开:如果不是,则运行您的脚本,否则跳过它并等待其下一个事件。这些工具是特定于操作系统的:在 OS X 和 Linux 中,您可以使用 lsof。请注意,这种方法不会保护您免受另一个进程在您的脚本运行时打开该文件。
【讨论】: