inotify 脚本在第一次更改后停止

inotify 脚本在第一次更改后停止

灵感来自这个超级用户的回答我编写了以下copy_library.sh脚本,并将其保存在名为的同一文件夹中library.bib

#!/bin/sh
while inotifywait -e close_write library.bib; do
    cp -f ./library.bib ../other_place/ ;
    echo "Library copied"
done

如果我手动启动此脚本,并且./copy_library.sh在第一次复制后进程退出(成功运行):

londonrob ~/mydir
> ./copy_library.sh 
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE 
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>

并且没有跟踪到进一步的更改。我确信我应该用这个脚本做一些事情,这样它就可以在“后台”持续运行,而不需要我手动启动它。

但什么?

答案1

inotifywait手册页中:

inotifywait 使用 Linux 的 inotify(7) 接口高效地等待文件更改。它适合从 shell 脚本等待文件更改。它可以在事件发生时退出,也可以在事件发生时持续执行并输出事件。

-m, --monitor 接收单个事件后不退出,而是无限期执行。默认行为是在第一个事件发生后退出。

编辑:我有一个日志,每 15 秒附加一次。以下脚本对 inotifyread 输出的每一行执行一次 while 循环:

#!/bin/sh

inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
    echo "$line"
    echo "Copy coperation here..."
done

当然,就您而言,您必须将事件(修改)更改为 close_write。

相关内容