如何查找目录中最近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)
答案 0 :(得分:3)
您可以使用Dir.[]
获取文件列表,并在每个文件上使用File.mtime
来过滤它们:
Dir["*"].select { |fname| File.mtime(fname) > (Time.now - 60) }
答案 1 :(得分:2)
您的代码存在的问题是Ruby不能控制您连接的远程系统,而是该系统上的shell,并且您只能发出命令,就好像您已经ssh'd进入你自己的本地系统。 Ruby的内置命令(如Dir.chdir
)仅适用于本地,而不适用于远程会话。
最好的办法是写一个你执行的脚本驻留在该系统上,否则执行命令的任务变得更加困难,你需要预测提示,并可能在代码执行时预测该系统上的命令的各种响应
Net :: SSH gem包含显示如何发出远程命令的示例;你需要记住,一旦你连接了你向shell发出命令,而不是Ruby。
Net::SSH.start('host', 'ava') do |ssh|
`ruby /home/ava/test`
end
给ruby:没有这样的文件或目录 - / home / ava / test(LoadError)
诊断这种情况的最佳方法是首先通过SSH连接到您自己的本地方框并在本地执行代码,或者使用代理代码,该代码仅回显您在其他计算机上的现实生活中使用的命令。然后你可以测试是否会调用这些动作。
而不是:
ruby /home/ava/test
发出如下命令:
ls -al /home/ava
首先,查看哪些文件可见。
跟随以下内容:
ruby -pe '%x(ls /home/ava)'
查看是否找到了Ruby,它可以在路径中执行该命令。
处理远程系统与在本地运行脚本不同。您的环境可能不同,这意味着您预期的PATH或变量可能不同。