我有一个带有 inotifwait 的 shell 脚本,设置如下:
inotifywait -r -e close_write,moved_to -m "<path>/upload" --format '%f##@@##%e##@@##%w'
有一些 docx 文件驻留在监视目录中,一些脚本通过以下命令将 docx 转换为 PDF:
soffice --headless --convert-to pdf:writer_pdf_Export <path>/upload/somedoc.docx --outdir <path>/upload/
以某种方式在生成 PDF 后立即触发两次事件。条目如下:
somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
这里还有什么问题?
问候
最佳答案
它被触发两次,因为这就是 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'
好处是你不再依赖soffice的内部逻辑。
如果您无法调整生成 pdf 文件的脚本的行为,那么您确实需要求助于@Tarun 建议的解决方法。
关于shell - inotifywait 在将 docx 转换为 PDF 时触发事件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482381/