【问题标题】:How to find most recently modified file in a remote directory (via ssh)?如何在远程目录中找到最近修改的文件(通过 ssh)?
【发布时间】:2025-01-01 18:10:02
【问题描述】:

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

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

有没有更好的办法?

【问题讨论】:

  • 你是如何访问远程目录的?
  • Net::SSH?或者ssh 通过反引号?或者是其他东西?你试过什么?
  • 拉米:我的意思是@Nick 问的。
  • 您还没有尝试过什么吗?向我们展示您解决此问题的尝试。
  • 我试过保险丝。但我无法安装(只是说remote host disconnected)。我现在只是通过 ssh 发送一个 ls 但解析很繁琐。

标签: ruby


【解决方案1】:

这不是一个 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 中解析结果输出。如果您想在本地进行排序,您也可以从ls 中丢弃t 标志,尽管最好将尽可能多的处理卸载到远端主机,而不是让它返回大量数据和在本地处理它。返回的越少,你的整体代码就会越快。

【讨论】:

  • hmm...这似乎很接近,但我需要的是最近修改的与正则表达式匹配的文件夹。抱歉,我不是很清楚。
  • 嗯...当您提出问题时,指定ALL标准真的很重要。