我发现这个答案很有用:
How can you find the most recently modified folder in a directory using Ruby?
但我需要的是为远程目录(通过SSH)做同样的事情。在Ruby中最简单的方法是什么?
这是我到目前为止所拥有的:
paths = (IO.popen("ssh -A user@yo.mammas.house.com ls /install/")).read.split("\n")
我只想要这些文件夹:
if p =~ /^release-MC-.*$/
我正在解析ls
命令的结果,拆分新行,匹配正则表达式,下一步是构建文件夹名称中嵌入的日期字符串的哈希值。我真的不想做最后一步,但它会起作用。
有更好的方法吗?
答案 0 :(得分: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
标志,尽管将更多的处理卸载到远端主机是一个更好的主意,而不是让它返回一个巨大的数据全局并在本地处理它。您返回的越少,整体代码就越快。