我有一个小脚本,可以使用inotifywait
. 当某些事情发生变化时,一批文件会通过一个大约需要十秒钟运行的过程(编译、压缩、重组等)发送。
考虑以下示例:
touch oli-test
inotifywait -mq oli-test | while read EV; do sleep 5; echo "$EV"; done
如果您touch oli-test
在另一个终端中运行几次,您会看到每个循环在继续之前完成。那个场景对我来说非常真实。如果我在文件正在处理时忘记保存文件,或者发现错误,事件会堆积起来,我正在等待几分钟。
令我震惊的是,有两种技术可以客观地使这个工作流程变得更好。我不确定什么是最简单或最好的,所以我将两者都介绍:
中断之前的运行,并立即重新启动。脚本化过程目前只是一组内联命令。我可以将它们分解为 Bash 函数,我并不热衷于将它们分解得更远。
对等待处理的事物列表进行去抖动处理,以便如果同时发生五个事件(或在它已经在处理时),它只会再次运行一次。
(或者两者都......因为我确信在某些情况下两者都会有用)
我也对不同的方法持开放态度,inotifywait
但它们需要给我相同的结果并在 Ubuntu 上工作。