1

我发现这个答案很有帮助:

如何使用 Ruby 在目录中找到最近修改的文件夹?

但我需要对远程目录做同样的事情(通过 SSH)。在 Ruby 中执行此操作的最简单方法是什么?

这是我到目前为止所拥有的:

paths = (IO.popen("ssh -A user@yo.mammas.house.com ls /install/")).read.split("\n")

我只想要这些文件夹:

if p =~ /^release-MC-.*$/

我目前正在解析ls命令的结果,拆分新行,匹配正则表达式,下一步是构建嵌入在文件夹名称中的日期字符串的哈希值。我真的不想做这最后一步,但它会起作用。

有没有更好的办法?

4

1 回答 1

0

这不是一个 Net::SSH 问题,因为它是“我可以发出什么命令来查找最近修改的文件?”

SSH 连接可以发出命令,所以一旦你知道要发送或执行什么命令,你就完成了。我会看:

ls -Alt path/to/files | sed -n '2p'

充实一些更有用的结果:

require 'net/ssh'

HOST = 'hostname.domain'
USER = 'user'
PASSWORD = "password"

output = Net::SSH.start(HOST, USER, :password => PASSWORD) { |ssh|
  ssh.exec!('ls -alt . | grep pattern_to_find') 
}

puts output

在用正确的值填写字段并运行它之后,连接到我工作中的一个主机并返回如下内容:

drwxr-xr-x  11 xxxxxxxxxxxx xxxxxxxxx    4096 Oct  2 16:20 development

如果您需要检索多个命中,则在命令返回后展开模式grep或丢弃管道grep并在 Ruby 中解析结果输出。如果您想在本地排序,您也可以丢弃该t标志ls,但最好将尽可能多的处理卸载到远端主机,而不是让它返回大量数据并在本地处理它。你返回的越少,你的整体代码就会越快。

于 2013-10-29T16:30:10.227 回答