我已经看到一个使用RSYNC和SSH来实现这一点的例子,但是在我的具体案例中,我无法实现这一点——它给了我一些关于协议版本的错误
我想将所有类型为.sh.jar.war的文件从目录结构复制到一个远程主机,该主机距离ssh 2跳(带代理)。
我不知道最好的办法。是使用SCP还是某种bash脚本?
我所知道的:

find . | grep "\.sh"

会给我一个很好的文件列表,我可能可以使用xargs来处理它们。
我想有些选择是创建一个tar.gz文件并将其覆盖,或者编写一个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`;
    }
}

最佳答案

假设您的文件名不包含换行符,您可以使用cpio(1)

find . -type f \( -name '*.sh' -o -name '*.[jw]ar' \) -print | \
    cpio -oa | \
    ssh "${USER}@${MACHINE}" "cd ${remotePrefix}; cpio -idm"

关于linux - 选择SCP副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31173025/

10-12 23:38