灵感来自这个超级用户的回答我编写了以下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。