在将docx转换为PDF时,inotifywait触发事件两次

Jat*_*oot 6 shell inotify inotifywait

我有shell脚本与inotifwait设置如下:

inotifywait -r  -e close_write,moved_to  -m "<path>/upload" --format '%f##@@##%e##@@##%w'
Run Code Online (Sandbox Code Playgroud)

有一些docx文件驻留在监视目录中,一些脚本通过以下命令将docx转换为PDF:

soffice --headless --convert-to pdf:writer_pdf_Export <path>/upload/somedoc.docx --outdir  <path>/upload/
Run Code Online (Sandbox Code Playgroud)

一旦生成PDF,就会以某种方式触发事件两次.参赛作品如下:

somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
Run Code Online (Sandbox Code Playgroud)

还有什么不对吗?

问候

ffe*_*ast 1

它被触发两次,因为这就是 soffice 内部的行为方式。有一天,它可能会开始写入 10 次,并且sleep 2在一次运行期间在这样的写入之间进行操作,我们的程序不能,而且我相信不应该预见它并依赖它。

所以我尝试从不同的角度解决问题 - 让我们将转换后的文件放入临时目录,然后将其移动到目标目录,如下所示:

soffice --headless --convert-to pdf:writer_pdf_Export <path>/upload/somedoc.docx --outdir <path>/tempdir/ && mv <path>/tempdir/somedoc.pdf <path>/upload/

inotifywait并按以下方式 使用:

inotifywait -r -e moved_to  -m "<path>/upload" --format '%f##@@##%e##@@##%w'
Run Code Online (Sandbox Code Playgroud)

好处是你不再依赖soffice的内部逻辑。如果您无法调整生成 pdf 文件的脚本的行为,那么您确实需要诉诸 @Tarun 建议的解决方法。