如何为rsync创建别名?
How to make a alias to rsync?
我经常使用这个命令来同步远程和本地。
rsync -xyz --foo=bar some_files user@remote.com:remote_dir
所以我想用一个别名来简化它,就像这样:
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
将正常工作,但我不知道该怎么做。
欢迎任何建议。
不是真正的答案,但我用 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");
您可以将此脚本复制到您的路径中或为其创建别名。
你只需要去掉 $local_files
:
周围的双引号
up_remote () {
local_files=${@:1:$((${#}-1))}
remote_dir="${@:$#}"
rsync -xyz --foo=bar $local_files a.b.com:"$remote_dir"
}
请注意,我还更改了选择 remote_dir
的方式,无法在我的 bash 版本中使用您的方式。
我经常使用这个命令来同步远程和本地。
rsync -xyz --foo=bar some_files user@remote.com:remote_dir
所以我想用一个别名来简化它,就像这样:
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
将正常工作,但我不知道该怎么做。
欢迎任何建议。
不是真正的答案,但我用 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");
您可以将此脚本复制到您的路径中或为其创建别名。
你只需要去掉 $local_files
:
up_remote () {
local_files=${@:1:$((${#}-1))}
remote_dir="${@:$#}"
rsync -xyz --foo=bar $local_files a.b.com:"$remote_dir"
}
请注意,我还更改了选择 remote_dir
的方式,无法在我的 bash 版本中使用您的方式。