我正在寻找一种方法来监视文件并在文件被删除后立即触发事件。一旦文件被删除,我将替换/复制一个新文件并重新启动监视器。
例如
watch "/tmp/fileToMonitor.txt"
// file deleted by some process
cp new_file "/tmp/fileToMonitor.tx"
// watch file again (repeat same steps..)
我如何使用 bash 脚本来实现这一点?这可能吗?
答案1
您可以使用inotifywait
实用程序(从inotify-tools
包中,至少在 Debian 下)来执行此操作。
inotifywait
可以将事件名称作为参数,并等待它们在受监控的文件或目录上发生,然后再返回。对于您的情况,您需要使用事件来delete_self
指示您希望程序在受监控的文件被删除时返回。
/tmp/fileToMonitor.txt
因此,要在删除后立即复制新文件,您可以执行以下操作:
inotifywait -e delete_self "/tmp/fileToMonitor.txt" && cp new_file "/tmp/fileToMonitor.txt"
如果您想再次开始监控,可以将其放入循环中:
while true ; do
inotifywait -e delete_self "/tmp/fileToMonitor.txt" \
&& cp new_file "/tmp/fileToMonitor.txt"
done