Bash:如何检查文件是否仍在使用中

时间:2013-10-14 13:34:56

标签: bash while-loop

我目前有一个bash脚本,它查看文件并将一些数据存储为变量......我只希望在文件没有更新的情况下发生这种情况。

我在考虑使用类似的东西:

touch "/path/tofile/temp.txt"
while [[ test "/path/tofile/temp.txt" -nt "/path/tofile/readme.txt" ]]
do
echo "readme is still updating"
else? move on???

1 个答案:

答案 0 :(得分:1)

通常的做法是使用临时名称编写文件,并在准备好被其他进程使用时将其重命名为“官方”名称。这样,你可以避免一大堆问题。即使这看起来很多工作,你也应该考虑这个。

或者,您可以使用锁定文件夹:更新过程和脚本在磁盘上创建文件夹。只要该文件夹存在,另一个进程正在处理该文件,因此当前进程需要等待。缺点:偶尔会发生错误并且锁定文件夹将保持不变,你将陷入僵局。

或者您可以使用lsof查看是否有一个进程打开此文件进行编写...但这并不意味着当您开始阅读该文件时此信息仍然存在。

再次:使用临时名称并在文件准备好时重命名该文件。真。其他一切可能有时会起作用。这真的是你想告诉老板吗?