2

如何在最近 n 分钟内编辑的目录中查找文件?

在 unix 中是-mmin -60.

host

ruby /home/ava/test工作正常!

Net::SSH.start('host', 'ava') do |ssh|
 `ruby /home/ava/test`
end

ruby: No such file or directory -- /home/ava/test (LoadError)

4

2 回答 2

3

您可以使用 获取文件列表Dir.[],并File.mtime在每个文件上使用来过滤它们:

Dir["*"].select { |fname| File.mtime(fname) > (Time.now - 60) }
于 2013-09-15T02:41:19.410 回答
2

您的代码的问题在于 Ruby 无法控制您连接到的远程系统,而是该系统上的 shell,您只能发出命令,就好像您要 ssh 进入您自己的系统一样本地系统。Ruby 的内置命令,比如Dir.chdir只适用于本地,不适用于远程会话。

最好的办法是编写驻留在该系统上执行的脚本,否则执行命令的任务会变得更加困难,并且您需要在代码执行时预期该系统上的命令的提示和可能的各种响应。

Net::SSH gem 包括显示如何发出远程命令的示例;您需要记住,一旦连接,您就是向 shell 发出命令,而不是向 Ruby。


Net::SSH.start('host', 'ava') do |ssh|
 `ruby /home/ava/test`
end

给出 ruby​​: No such file or directory -- /home/ava/test (LoadError)

诊断此问题的最佳方法是首先通过 SSH 连接到您自己的本地机器并在本地执行代码,或者使用仅与您在现实生活中在另一台机器上使用的命令相呼应的代理代码。然后您可以测试是否会调用这些操作。

代替:

ruby /home/ava/test

发出如下命令:

ls -al /home/ava

首先,查看哪些文件是可见的。

遵循以下内容:

ruby -pe '%x(ls /home/ava)'

查看是否找到了 Ruby,并且它可以在路径中执行该命令。

处理远程系统与在本地运行脚本不同。您的环境可能不同,这意味着您期望的 PATH 或变量可能不同。

于 2013-09-15T03:20:36.047 回答