我有一个目录,里面有很多带有代码的文件夹,我需要运行一个脚本来将rsync转换到其他服务器上。 我有这个脚本编写和工作正常,但我找不到将检查目录树的变化。 我尝试统计,但只检查一个文件夹,而不是recursion(据我所知)。 任何人都知道我可以安装的命令或程序来做到这一点? 我使用Ubuntu 10.04。 提前致谢。
inotifywait会做recursion检查。
这是在Ubuntu的资料库 。
这个工作的完美工具是使用inotify内核服务。 你可以在一个shell脚本上用inotify-tools(debian / ubuntu)来使用它们。 您可以阅读更多内容,并在项目页面上查看一些示例。 在网页上甚至有一个例子,似乎做了你想要的东西:
#!/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
rsync将检查目录树的更改,只复制已更改的文件(如果将其作为源目录)。
看看inotify 。 前段时间我用dnotify或sgi_fam解决了一个类似的问题(不记得是哪个),但是inotify似乎已经超过了他们两个。
有人已经发明了这个轮子。 它被称为lsyncd ,它显然是一个rsync和inotify混搭。 我自己并没有使用它,因为inotify的限制是这样的,它不扩展到真正的大(和深)目录。 我等着直到用fsnotify直接重新实现它。
也有似乎做同样的事情的PIrsyncD 。
使用find
find /path -mmin 1
这将检查一个文件或目录是否在1分钟前被修改,查看手册页以获取更多选项。