如何使用Ruby Net :: SSH.start传输多个文件?

时间:2016-09-24 11:19:03

标签: ruby

我想将远程主机/root/files/*.log中的所有文件复制到我当前的目录 - ./files1/

require 'rubygems'
require 'net/ssh'
require 'net/scp'

Net::SSH.start( scp_hostname, scp_username, :keys => scp_keys, :timeout => 360 ) do |ssh|
    ssh.scp.download!( '/root/files/*.log', './files1/' )
    ssh.exec!( .. )
    ssh.exec!( .. )
end

我有一个例外:

caught exception SCP did not finish successfully (1): scp: /root/files/*.log: No such file or directory

但是当我复制特定文件

时它才有效
ssh.scp.download!( '/root/files/myfile.log', './files1/' )

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我建议使用net sftp,因为它允许使用更优雅的globing目录。这里:

barNames = [
    "name1", "name2", "name3", "name4", "name5",
    "name6", "name7", "name8", "name9", "name10"
].slice(0,NoOfBars);

或使用ssh,您可以使用以下技巧:

require 'net/sftp'
Net::SFTP.start( scp_hostname, scp_username, :keys => scp_keys, :timeout => 360 ) do |sftp|
    sftp.dir.glob("/remote/path", "*.log") do |file|
      sftp.download!( "/remote/path/#{file.name}", "./files1/#{file.name}" )
    end
end

答案 1 :(得分:0)

你也可以使用没有任何红宝石宝石。使用scp命令。

SCP的基本语法

scp source_file_name username@destination_host:destination_folder

scp username@remote:/file/to/send /where/to/put

修改更新

只需删除timeout选项即可为您提供帮助!并使用:recursive => true选项。

require 'rubygems'
require 'net/ssh'
require 'net/scp'

Net::SSH.start( scp_hostname, scp_username, :keys => scp_keys ) do |ssh|
    ssh.scp.download!( '/root/files/*.log', './files1/', :recursive => true )
    ssh.exec!( .. )
    ssh.exec!( .. )
end

希望这对你有帮助!