如何在脚本中确定某个文件当前是否正由另一个进程写入?

Modified on: Sat, 09 Jun 2018 05:47:23 +0800

我是新手来编写脚本,所以我可能会咆哮错误的树,但这是我现在的情况:

在脚本中,我开始soffice;将odt转换为pdf

似乎 soffice 从脚本的过程中分离出来,然后徘徊去做自己的事情。好的,那没关系; GUI应用程序倾向于这样做......

但是我需要等到新的 pdf 完全写入,因为我的下一步是处理新的 pdf

(据我所知)我无法使用soffice的进程ID,因为在我的脚本启动之前它可能已经是一个正在运行的进程:例如。对于另一个不相关的文档/演示文稿/电子表格, soffice 可能已经打开了正常的GUI活动。

问题的关键在于,在我开始之前,必须最终确定新 pdf 的写作......

是否有某种方法可以确定文件不再何时以“写入”模式打开另一个进程? ......

作者:,Peter.O

最佳答案

您可以使用lsof | grep /absolute/path/to/file.txt查看文件是否打开。
如果文件已打开,则此命令将返回状态0,否则将返回256(1)。

请注意,此命令将花费一秒钟,因为通常会有很多文件随时打开。

例如,您也可以使用lsof -c gedit来查看gedit已打开的文件。将输出限制为一个进程会将执行时间减少到几乎没有。

这是一个要等待的脚本:

#!/bin/bash while : do if ! [[ `lsof -c python3.2 | grep test.py` ]] then break fi sleep 0.5 done echo "done"

当进程'pyhton3.2'打开文件'test.py'时运行。一旦文件关闭,它就会转到'echo done'并退出。

我已经把'睡眠0.5'放在那里,这样循环就不会对CPU造成严重影响。否则,它将使用100%cpu。

加成强>
似乎有一种简单的方法来修改odt到pdf:

  

感谢OOo论坛上的scls19fr
  这个可爱的小费。你可以转换
  OpenOffice Writer文件到PDF
  命令行使用unoconv -f pdf input.odt要获得unoconv,只需运行即可
  sudo apt-get install unoconv at
  终奌站。
  (rhyshale.wordpress.com的rhyshale)

作者:,Stefano Palazzo

相关问答

添加新评论