gpt4 book ai didi

linux - 选择 SCP 副本

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:11 25 4
gpt4 key购买 nike

我看过一个使用 RSYNC 和 SSH 来执行此操作的示例,但是在我的特定情况下我无法使其正常工作 - 它给了我一些关于协议(protocol)版本的错误

我想将所有类型为 .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`;
}
}

最佳答案

假设您的文件名不包含换行符,您可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com