如何查找在某个时间间隔内编辑的ruby中的文件?

时间:2013-09-15 02:35:10

标签: ruby unix

如何查找目录中最近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)

2 个答案:

答案 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或变量可能不同。