在 Linux 中删除特定文件时如何获得通知?

use*_*717 4 linux bash shell-script

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

例如

watch "/tmp/fileToMonitor.txt"

// file deleted by some process
cp new_file "/tmp/fileToMonitor.tx"

// watch file again (repeat same steps..)
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 bash 脚本做到这一点?这可能吗?

小智 6

您可以使用inotifywait实用程序(从inotify-tools包中,至少在 Debian 下)执行此操作。

inotifywait可以将事件名称作为参数,并在返回之前等待它们在受监视的文件或目录上发生。在您的情况下,您需要使用该delete_self事件来指示您希望程序在被监控文件被删除时返回。

因此,要/tmp/fileToMonitor.txt在删除后立即复制新文件,您可以执行以下操作:

inotifywait -e delete_self "/tmp/fileToMonitor.txt" && cp new_file "/tmp/fileToMonitor.txt"
Run Code Online (Sandbox Code Playgroud)

如果你想再次开始监控,你可以把它放在一个循环中:

while true ; do
  inotifywait -e delete_self "/tmp/fileToMonitor.txt" \
    && cp new_file "/tmp/fileToMonitor.txt"
done
Run Code Online (Sandbox Code Playgroud)