我想要使用rsync自动运行两个本地目录之间的单向同步。当检测到/dir1或其子目录中的文件更改时,应该运行以下命令:
是否有可能提供rsync的参数以仅复制由fswatch事件给出的实际更改的文件?
rsync -rtuv /dir1 /dir2
我如何用fswatch实现这个目标?是否有可能提供rsync的参数以仅复制由fswatch事件给出的实际更改的文件?
alias run_rsync='rsync -azP --exclude ".*/" --exclude ".*" --exclude "tmp/" ~/Documents/repos/my_repository username@host:~'
run_rsync; fswatch -o . | while read f; do run_rsync; done
第二行无条件运行 run_rsync
一次,然后在当前目录中的每个更改上运行(或者指定确切的路径而不是.
)
Rsync选项:
您需要 fswatch
:
brew install fswatch
fswatch
之后使用-or
会更好,以实现递归。 - Zoltán一行代码的解决方案:
function run_rsync() { rsync your_args } ; run_rsync; fswatch -o your_directory | while read f; do run_rsync; done
感谢 @Daniel 提供的启发性答案。
rsync
已经非常优化,只做必要的最小更新 - 为什么不直接使用fswatch . | while read f; do echo rsync; done
?http://bryanpendleton.blogspot.co.uk/2010/05/rsync-algorithm.html - Mark Setchell