如何为rsync创建别名?

时间:2016-06-23 08:21:17

标签: linux rsync scp

我经常使用此命令同步远程和本地。

up_remote () {
    local_files=${@:1:$((${#}-1))}  # treat argument[1:last-1] as local files
    remote_dir="${@[$#]}" # treat argument[last] as remote_dir
    echo $local_files
    echo $remote_dir
    rsync -xyz --foo=bar "$local_files" user@remote.com:"$remote_dir"
}

所以我想用别名来简化它,比如:

up_remote local1 local2 remote_dir

但是,如果我传递三个或更多论点,它就不会起作用:

set -x

当我使用rsync调试此函数时,我发现该函数将生成rsync -xyz --foo=bar 'local1 local2' user@remote.com:"$remote_dir" ,如下所示:

'

请注意local1 local2周围的单引号(rsync)。如果我删除这些单引号,x=[u'9-9', u'-5-5',u'-45-45',u'99-99'] 将正常运行,但我不知道如何执行此操作。

欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

您只需删除$local_files附近的双引号:

up_remote () {
  local_files=${@:1:$((${#}-1))}
  remote_dir="${@:$#}"
  rsync -xyz --foo=bar $local_files a.b.com:"$remote_dir"
}

注意我也改变了选择remote_dir的方式,无法在我的bash版本中使用。

答案 1 :(得分:-1)

不是真的答案,但是我用perl做了,它确实有效:

#!/usr/bin/perl

use strict;
use warnings;

my @args = @ARGV;
my $files;

my $destination=pop(@args);

foreach(@args){
    $files.="'".$_."' ";
}

system("rsync -xyz --foo=bar $files user\@remote.com:$destination");

您可以在路径中复制此脚本或为其创建别名。