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)
还有什么不对吗?
问候
它被触发两次,因为这就是 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 建议的解决方法。