用rsync同步文件夹

rsync
用rsync命令在不同机器间同步文件夹,及hexo-deployer-rsync一个BUG的规避方法

命令格式

例如,要把本机public目录与服务器上的/home/blog目录同步,用以下命令:

1
$ rsync --delete -avz -e ssh public/ root@121.xx.xx.212:/home/blog

如果服务器的ssh端口不是默认的22,则需要给ssh指定端口号,这种情况不常见:

1
$ rsync --delete -avz -e 'ssh -p 22' public/ root@121.xx.xx.212:/home/blog

hexo-deployer-rsync的BUG

如果没有在_config.yml中指定port参数,则无法正确同步,实际上最后执行的命令是:

1
$ rsync --delete -avz -e public/ root@121.xx.xx.212:/home/blog

可以发现,指定了-e,但是却少了ssh。出错的代码如下:

1
2
3
4
5
6
7
8
9
10
var params = [
'-az',
'public/',
'-e',
args.user + '@' + args.host + ':' + args.root
];

if (args.port && args.port > 0 && args.port < 65536){
params.splice(params.length - 1, 0, 'ssh -p ' + args.port);
}

截止到本文,已经有若干人都针对此issue提了pr,但是作者还没有merge。
default port issue

所以目前避免此BUG的方法,是在_config.yml中设置port为22