现有一需求,想从服务器上下载一个目录到另一个机器上,而且服务器没有足够空间供打包或者文件太大太多,打包的时间也太长,无法忍受,怎么办呢?
之前从来没用过rsync,这次准备试一试,没想到效果挺好的。
rsync可以很好地进行数据压缩和打包传输,从而使得大量零散文件也不会影响到传输效率。
具体使用方法如下:
rsync -avzP 源目录 目的目录
。目录在远程和本地的写法跟惯例一样的,比如本地目录
、用户@远程IP:远程目录
。
例如,如果要把本地的data传输到远程的temp下,则可以rsync -avzP ./data/ root@1.2.3.4:/home/fz/temp/
。
解释下几个参数的意思:
-a
表示传输时使用archive方式,即保持所有文件的原有属性。-v
表示输出verbose信息,即详细输出模式。-z
表示使用压缩,对于压缩率不高的文件可以考虑不使用压缩。-P
表示--partial --progress
,即断点续传和进度显示。重新执行传输命令即可断点续传。但断点续传的行为有点奇怪,有时候要等上很久那个传一半的文件才会出现或者更新!
要注意的是,rsync本身会知道还有什么文件没有同步,断点续传针对的是某个文件传到一半的情况,它只是把传到一半的文件保留下来而已。而且再传的时候会花少许时间校验一下。
另外还有个-u
,可以将修改时间更新的文件跳过,但不比较两个文件是否一样。
这是在源机器上操作的,将数据传入目的机器。也可以将两个路径反过来,并且在目的机器上操作,这样就可以从源机器上rsync到本机了。
PS: 如果ssh的端口不是默认的22的话,如果还想用rsync使用ssh登录的话,需要用-e
指定ssh端口,即加上-e 'ssh -p 端口'
参数。
还有个要注意的地方:如果路径中有空格,要用双引号括起来,并且空格使用反斜杠转义,像这样\
。
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。