15

我想在两个本地目录之间自动运行单向同步,使用rsync. 这意味着当在文件/dir1或其子目录中检测到更改时,应运行以下命令:

rsync -rtuv /dir1 /dir2

我怎样才能实现这一目标fswatch

是否可以提供参数rsync以仅复制事件给出的已更改的实际文件fswatch

4

2 回答 2

32
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 选项:

  • -a - 代表“存档”并递归同步并保留符号链接、特殊和设备文件、修改时间、组、所有者和权限。
  • -z - 压缩
  • -P - 结合标志 --progress 和 --partial。其中第一个为您提供传输进度条,第二个允许您恢复中断的传输
  • --exclude - 按模式排除文件

您将需要fswatch

brew install fswatch
于 2016-08-17T12:44:18.607 回答
0

对于单线解决方案:

function run_rsync() { rsync your_args } ; run_rsync; fswatch -o your_directory | while read f; do run_rsync; done

感谢@Daniel 的鼓舞人心的回答。

于 2022-03-03T08:56:30.530 回答