我有一个目录,里面有许多包含代码的文件夹,我需要运行一个脚本来将更改同步到其他几个服务器。我已经编写了该脚本并且运行良好,但我找不到可以检查目录树是否有更改的东西。我试过 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 将检查目录树是否有更改,并且仅复制已更改的文件。