我正在使用 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
. 请注意,这种方法不能保护您免受脚本运行时打开该文件的另一个进程的影响。