如何在 Linux 中删除特定文件时收到通知?

如何在 Linux 中删除特定文件时收到通知?

我正在寻找一种方法来监视文件并在文件被删除后立即触发事件。一旦文件被删除,我将替换/复制一个新文件并重新启动监视器。

例如

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

相关内容