需要每 10 秒检查一次目录树是否有变化,如果有变化则运行脚本

需要每 10 秒检查一次目录树是否有变化,如果有变化则运行脚本

我有一个目录,里面有许多包含代码的文件夹,我需要运行一个脚本来将更改同步到其他几个服务器。我已经编写了该脚本并且运行良好,但我找不到可以检查目录树是否有更改的东西。我试过 stat,但它只能检查一个文件夹,而不是递归(据我所知)。有人知道我可以安装什么命令或程序来执行此操作吗?我使用 Ubuntu 10.04。提前致谢。

答案1

inotifywait将进行递归检查。

它位于Ubuntu 存储库

答案2

完成这项工作的最佳工具是使用 inotify 内核服务。您可以使用 inotify-tools 包 (debian/ubuntu) 在 shell 脚本上使用它们。您可以阅读更多内容并查看一些示例项目页面。页面上甚至还有一个例子,它似乎做了一些接近你想要的事情:

#!/bin/sh

# get the current path
CURPATH=`pwd`

inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \
-e close_write /tmp/test | while read date time dir file; do

       FILECHANGE=${dir}${file}
       # convert absolute path to relative
       FILECHANGEREL=`echo "$FILECHANGE" | sed 's_'$CURPATH'/__'`

       rsync --progress --relative -vrae 'ssh -p 22'  $FILECHANGEREL [email protected]:/backup/root/dir && \
       echo "At ${time} on ${date}, file $FILECHANGE was backed up via rsync"
done

答案3

如果您将目录作为源,rsync 将检查目录树是否有更改,并且仅复制已更改的文件。

答案4

有人已经发明了这个轮子。它被称为同步它显然是 rsync 和 inotify 的混合体。我自己没有用过它,因为 inotify 的局限性在于它不能扩展到真正大(和深)的目录。我正在等待他们直接使用重新实现它通知

还有同步D似乎做了同样的事情。

相关内容