如何在远程目录中找到最近修改过的文件(通过ssh)?

时间:2013-10-29 15:53:44

标签: ruby

我发现这个答案很有用:

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命令的结果,拆分新行,匹配正则表达式,下一步是构建文件夹名称中嵌入的日期字符串的哈希值。我真的不想做最后一步,但它会起作用。

有更好的方法吗?

1 个答案:

答案 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标志,尽管将更多的处理卸载到远端主机是一个更好的主意,而不是让它返回一个巨大的数据全局并在本地处理它。您返回的越少,整体代码就越快。