Ruby NET :: SCP包含通配符

Dev*_*art 5 ruby scp net-ssh

我需要每天从我有SCP而不是SSH访问的客户端下载文件.

文件名将始终为 /outgoing/Extract/visit_[date]-[timestamp].dat.gz'

例如昨天的文件被调用 visits_20130604-090003.dat.gz

我不能依赖时间戳总是相同的事实,但日期应始终是昨天的日期:

我到目前为止的设置:

我的主目录包含名为downloads_fullname和的子目录downloads_wildcard.

它还包含一个名为的简单ruby脚本foo.rb.

foo.rb的内容是这个`

#! /usr/bin/ruby
require 'net/ssh'
require 'net/scp'
yesterday = (Time.now - 86400).strftime('%Y%m%d')

Net::SCP.start('hostname', 'username') do |scp|
  scp.download!('/outgoing/Extract/visits_' + yesterday + '-090003.dat.gz', 'downloads_fullname')
  scp.download!('/outgoing/Extract/visits_' + yesterday + '-*.dat.gz', 'downloads_wildcard')
end
Run Code Online (Sandbox Code Playgroud)

运行时,downloads_fullname目录包含该文件,但该downloads_wildcard目录不包含该文件.

有没有办法在Net :: SCP中使用通配符?或者有人有任何狡猾的解决方法吗?我试着\*无济于事.

the*_*Man 3

我不认为你可以使用 scp 到达那里,因为它希望你确切地知道你想要哪个文件,但 sftp 会让你获得目录列表。

您可以使用Net::SFTP以编程方式选择文件并请求它。这是示例代码:

需要“net/sftp”

Net::SFTP.start('主机', '用户名', :password => '密码') do |sftp|
  #上传文件或目录到远程主机
  sftp.upload!("/path/to/local", "/path/to/remote")

  # 从远程主机下载文件或目录
  sftp.download!("/path/to/remote", "/path/to/local")

  # 将远程主机的数据直接抓取到缓冲区
  data = sftp.download!("/path/to/remote")

  # 打开并写入远程文件的伪 IO
  sftp.file.open("/path/to/remote", "w") do |f|
    f.puts “你好,世界!\n”
  结尾

  # 打开并从伪 IO 读取远程文件
  sftp.file.open("/path/to/remote", "r") 做 |f|
    放置 f.gets
  结尾

  # 创建一个目录
  sftp.mkdir!“/路径/到/目录”

  # 列出目录中的条目
  sftp.dir.foreach("/path/to/directory") do |entry|
    放置条目.longname
  结尾
结尾

基于此,您可以列出目录条目,然后使用findselect迭代返回的列表以查找具有当前日期的条目。将该文件名传递给sftp.download!以将其下载到本地文件。