我经常使用此命令同步远程和本地。
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']
将正常运行,但我不知道如何执行此操作。
欢迎任何建议。
答案 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");
您可以在路径中复制此脚本或为其创建别名。