我非常喜欢Winscp中的Keep Remote Directory最新功能.不幸的是,我在OS X或Linux中找不到任何简单易用的东西.我知道理论上可以使用changedfiles或rsync完成同样的事情,但我总是发现这两个工具的教程缺乏和/或相互矛盾.
我基本上只需要一个在OSX或Linux中工作的工具,并在我更改本地目录时保持远程目录与本地目录同步(镜像).
更新
通过解决方案,我看到一对解决了手动保持远程目录与本地目录同步的一般问题.我知道我可以设置一个cron任务来每分钟运行rsync,这应该非常接近实时.
这不是我正在寻找的确切解决方案,因为winscp执行此操作以及更多:它检测目录中的文件更改(当我处理它们时),然后自动将更改推送到远程服务器.我知道这不是最好的解决方案(没有代码存储库),但它允许我在开发它时非常快速地在服务器上测试代码.有谁知道如何结合rsync与任何其他命令来获得此功能?
lsyncd似乎是完美的解决方案.它结合了inotify(内核内置函数,用于监视目录树中的文件更改)和rsync(跨平台文件同步工具).
lsyncd -rsyncssh /home remotehost.org backup-home/
引自github:
Lsyncd监视本地目录树事件监视器接口(inotify或fsevents).它聚合并组合事件几秒钟,然后生成一个(或多个)进程以同步更改.默认情况下,这是rsync.因此,Lsyncd是一种轻量级的实时镜像解决方案,相对容易安装,不需要新的文件系统或块设备,并且不会妨碍本地文件系统性能.
您希望同步"实时"如何?我仍然倾向于rsync,因为你知道它将在两个平台上完全支持(Windows也可以用cygwin),你可以通过cron作业运行它.我有我我的系统上运行(这也超级简单的bash文件没有删除旧文件):
#!/bin/sh rsync -avrz --progress --exclude-from .rsync_exclude_remote . remote_login@remote_computer:remote_dir # options # -a archive # -v verbose # -r recursive # -z compress
你最好的选择是设置并尝试一下.该-n (--dry-run)
选项是你的朋友!
请记住,rsync(至少在cygwin中)不支持unicode文件名(截至2008年8月16日).
你想要为linux远程访问做什么是使用'sshfs' - SSH文件系统.
# sshfs username@host:path/to/directory local_dir
然后将它视为网络安装,它是......
更多细节,比如如何设置,以便您可以在我的博客上以普通用户的身份进行设置
如果你想要winSCP的异步行为,你会想要使用rsync和定期执行它的东西.上面的cron解决方案有效,但对于winscp用例可能有点过分.
以下命令将每5秒执行一次rsync,以将内容推送到远程主机.您可以根据需要调整休眠时间以减少服务器负载.
# while true; do rsync -avrz localdir user@host:path; sleep 5; done
如果你有一个非常大的目录结构并且需要减少轮询的开销,你可以使用'find':
# touch -d 01/01/1970 last; while true; do if [ "`find localdir -newer last -print -quit`" ]; then touch last; rsync -avrz localdir user@host:path; else echo -ne .; fi; sleep 5; done
我说cron可能有点矫枉过正?但至少这一切都是从命令行完成的,可以通过ctrl-C来停止.
KB