2016-09-24 57 views
2

我想從遠程主機/root/files/*.log所有文件複製到我的當前目錄 - ./files1/如何使用Ruby Net :: SSH.start傳輸多個文件?

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/') 

任何人都可以幫忙嗎?

謝謝!

回答

1

我會建議使用net sftp,因爲它允許更優雅的globing目錄。在這裏:

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 

或SSH可以使用下面的技巧:

Net::SSH.start(scp_hostname, scp_username, :keys => scp_keys) do |ssh| 
    logfiles = ssh.exec!('ls /remote/path/*.log').split 
    logfiles.each { |file| 
    ssh.scp.download!(file, file) 
    } 
end 
+0

的感謝!我感謝你的回答!我喜歡你的訣竅:) – Berlin

0

你也可以使用沒有任何紅寶石寶石。使用scp命令。

SCP

scp source_file_name [email protected]_host:destination_folder 

或者

scp [email protected]:/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 

希望這對你有所幫助!