检查文件是否正在写入

检查文件是否正在写入

注:我已阅读其他问题,但我的需求不同。

我正在研究我的 NAS,它也可以用作我的 PVR 的存储设备。现在我想在 PVR 向 NAS 写入广播时更改 NAS 上的 shell 提示符(将其视为“在录制广播时不要做任何持久的事情”警告)。我的第一个想法是在提示符前加上一个红色的REC

正如另一个问题所指出的,我可以使用lsof以下方法:

# lsof /broadcast/storage/path/broadcast.ts; echo $?
<output of lsof>
0
# lsof /broadcast/storage/path/doesnt-exist.ts; echo $?
1
#

然而,lsof如果我使用

# lsof /broadcast/storage/path/*; echo $?
<output of lsof>
1
#

逻辑似乎是,当找到未使用的文件时,它会返回 1。但是,对我来说,当至少有一个文件正在使用时,它应该返回 0。

我知道我可以循环遍历文件并在第一个文件返回 0 时停止,但由于我想在提示中看到这个,所以我不知道如何将其变成一行。

编辑:
感谢 tink,我重新修改了我的想法,我的提示现在看起来像这样(请注意,我必须使通配符起作用,因为它lsof /.../*已经被纳入 PS1):

export PS1='`find /broacast/storage/path/ -name "*.sc" -print0 | \
    xargs -0 lsof | \
    grep -q COMMAND && echo -e "\033[0;31m[REC]-\033[0;37m"`\u@\h:\w\$ '

答案1

冒着陈述显而易见的事实的风险,你为什么不这样说呢:

lsof /broacast/storage/path/* | grep -q broadcast/storage/path ; echo $?

相关内容