【问题标题】:How to use fswatch and rsync to automatically sync directories?如何使用 fswatch 和 rsync 自动同步目录?
【发布时间】:2016-01-03 10:12:20
【问题描述】:

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

rsync -rtuv /dir1 /dir2

我如何通过fswatch 实现这一目标?

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

【问题讨论】:

标签: macos rsync fswatch


【解决方案1】:
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

【讨论】:

  • 非常好的忍者帖子。也许在fswatch 之后使用-or 会更好,因为递归。
  • 当心:fswatch 会扫描整个树,即使您排除了某些内容。 github.com/emcrisostomo/fswatch/issues/151。也就是说,您的node_modules(如果有的话)将被完全扫描。
  • 这不会为每个更改的文件调用 rsync,而只需要调用它们,因为 rsync 还会检查哪些文件已更改?
  • 不,-o 选项意味着 --one-per-batch。见这里:github.com/emcrisostomo/fswatch/wiki/….
  • @vaughan 哎呀,这是巨大的。有什么解决办法吗?
【解决方案2】:

对于单行解决方案:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多