【发布时间】:2015-10-15 03:24:49
【问题描述】:
我看到了一个使用 RSYNC 和 SSH 来执行此操作的示例,但是在我的特定情况下,我无法使其正常工作 - 它给了我一些关于协议版本的错误
我想将类型为 .sh、.jar、.war 的所有文件从目录结构复制到 2 跳(带代理的 ssh)ssh 距离的远程主机。
我不确定执行此操作的最佳方法。是 SCP 还是某种 bash 脚本?
我知道的:
find . | grep "\.sh"
会给我一个很好的文件列表,我可能可以使用xargs 来处理它们。
我想一些选择是创建一个tar.gz 文件并在上面创建scp,或者编写一个小bash 脚本来单独进行SCP-ing?
我想出了用 perl 来做这件事的可怕方法,但它真的很慢
my $find = `find .`;
my $remote = "USER\@MACHINE:";
my $remotePrefix = "/devel/test";
my @files = split('\n', $find);
foreach (@files) {
if (/(.*\/)([^\/]*\.sh)$/ or
/(.*\/)([^\/]*\.jar)$/ or
/(.*\/)([^\/]*\.war)$/
) {
my $fullPath = $_;
my $directory = $1;
my $file = $2;
# print "$fullPath => $directory || $file\n";
$cmd1 = qq(ssh USER\@MACHINE mkdir -p $remotePrefix$directory);
$cmd2 = qq(scp $_ $remote$remotePrefix$_);
`$cmd1`;
`$cmd2`;
}
}
【问题讨论】:
-
你需要在远端创建匹配的目录结构吗?它还不存在?
-
是的,我的脚本就是这样做的
-
是的,我看到确实如此,但我正在检查是否有必要。该要求意味着您不能只为此使用 scp ,因为它不会那样做。这意味着如果你不能使用
rsync的东西,tar可能是最好的选择。 -
您是否尝试在 rsync 上设置
--protocol=...以匹配遥控器? -
@meuh 在绝大多数情况下,协议不匹配错误与
rsync协议无关,通常是由远程shell 的配置文件在登录非交互式shell 时打印内容引起的。