当前位置:  开发笔记 > 编程语言 > 正文

尝试使rsync命令更容易出错

如何解决《尝试使rsync命令更容易出错》经验,为你挑选了1个好方法。

我通常使用scp来复制东西,但现在我正在尝试使用更强大的rsync命令.它通过仅复制已更改的文件来帮助我减少带宽使用.但是,rsync有很多复杂的参数,所以我想,嘿,我只是制作一个让我很容易的Bash脚本,并调用命令'rscp'.所以,我开始建造这样的东西.请注意,在下面的示例中,我的Web主机使用了除22之外的其他端口号,因此这就是使用$ 1的原因.

#!/bin/bash

rsync -avzp --progress --rsh='ssh -p$1' $2 $3 $4 $5 $6 $7

所以,我希望它的用法如下:

rscp 3822 --exclude=tiny_mce /var/www/mysite/* root@webhost.com:~/www/mysite

你知道,这会让我更接近我对scp命令的使用.

但是,当我运行它时,我收到此错误:

building file list ... 
4 files to consider
ERROR: destination must be a directory when copying more than 1 file
rsync error: errors selecting input/output files, dirs (code 3) at main.c(494) [receiver=2.6.9]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(454) [sender=2.6.9]

但是如果我回到常规rsync命令,它就可以了.

任何人都可以在我的Bash脚本中弄清楚我做错了什么吗?



1> Douglas Leed..:

/ var/www/mysite/*由shell扩展,因此传入的参数比在脚本中处理的要多得多.

此外,变量不能用单引号替换,因此您需要使用双引号.(参见bash 手册页)

试试这个:

#!/bin/bash
PORT=$1
shift
rsync -avzp --progress --rsh="ssh -p$PORT" "$@"

首先我们将端口从参数列表中取出(使用shift),然后我们使用"$ @"这是特殊的,它引用参数(在本例中为脚本),并转换为所有这些,但每个单独用双引号.(有关详细信息,请参阅bash 手册页).

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有