我正在寻找一个适用于以下工作流程的良好工具:
我有一个包含不同项目的目录(~500MB)。网站代码、C 应用程序、django 应用程序、小型虚拟机、图像等。这个目录目前位于一台笔记本电脑上,我用它来处理与计算机相关的所有事情,当我去上班(大学学生助理)时,我通常会带着这台笔记本电脑并将其设置在那里。
但是现在,我要买一台电脑来在那里工作,这意味着我不需要随身携带笔记本电脑,但我需要某种方式在两台机器之间同步我的工作。
基本上,我永远不会同时运行两台机器,所以我能想到的最简单的工作流程是:
- 每次我启动其中一台机器时,它都会拉取最新版本
- 每次我停止其中一台机器时,它都会将其版本推送为最新版本
其中“推送”和“拉取”是访问远程数据存储的一些黑盒过程。
目前,我使用lftp mirror --reverse --delete
一个网站托管实现了这个功能,但速度非常慢。有没有更好的解决方案,只是我不知道?
更新: 虽然它仍然太慢,但我设法通过 lftp 的 --parallel 标志大大加快了同步速度。
以下是我对“推动”进程的呼吁:
lftp -e '
set ftp:sync-mode off
open $HOST
user $USER $PASS
mirror --reverse --delete --verbose --parallel $SOURCE $TARGET
bye'
答案1
Rsync
这看起来像是 rsync 的用例。主页:http://rsync.samba.org/
来自手册页:
描述
Rsync 是一种快速且用途极为广泛的文件复制工具。它可以在本地进行复制,也可以通过任何远程 shell 复制至/从另一台主机,或者复制至/从远程 rsync 守护进程。它提供了大量选项来控制其行为的各个方面,并允许非常灵活地指定要复制的文件集。它以其增量传输算法而闻名,该算法通过仅发送源文件和目标中现有文件之间的差异来减少通过网络发送的数据量。Rsync 广泛用于备份和镜像,并作为日常使用的改进复制命令。
Rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,将直接在目标文件上对其他保留属性(根据选项的要求)进行任何更改。
rsync 的一些附加功能包括:
- 支持复制链接、设备、所有者、组和权限
- 与 GNU tar 类似的 exclude 和 exclude-from 选项
- CVS 排除模式,用于忽略 CVS 会忽略的相同文件
- 可以使用任何透明远程 shell,包括 ssh 或 rsh
- 不需要超级用户权限
- 文件传输流水线化,以最大限度地降低延迟成本
- 支持匿名或经过身份验证的 rsync 守护进程(镜像的理想选择)
rsync 的一个示例是:
rsync -avz user@host:'/src/' /dst
需要注意的一些问题如下:
请注意,结尾的“/”会产生影响。以下两个相同
- rsync -avz /源/目标
- rsync -avz /源/ /目标/源
您必须小心处理带有空格的文件,以便在远程 shell 上运行复制时它们不会被扩展。
- rsync -avz 用户@主机:'/src/这很糟糕'/dst
- rsync -avz 用户@主机:“'/src/这很好'”/dst
- rsync -avz 用户@主机:'/src/this\ is\ ok\ too' /dst
您需要一个用于远程复制的 ssh 守护程序,或者在远程计算机上以守护程序模式运行 rsync。
第一次传输将需要一段时间,但后续复制应该会更快,因为它只会复制大小发生变化的文件。
如果您想跳过某些类型的文件或目录,使用过滤规则也很有帮助。
答案2
为什么不使用 dropbox 或 skydrive。类似这样的应用程序。500M 现在并不多,尤其是当一切都转向光纤的时候。