test.rb:9:语法错误,意外的tIVAR,期待')'@ watch = 看 ^ test.rb:17:语法错误,意外的keyword_then,期待keyword_end File.file?(f)然后是“F” ^ test.rb:18:语法错误,意外的keyword_then,期待keyword_end File.directory?(f)然后“D” ^ test.rb:19:语法错误,意外的keyword_else,期待keyword_end else“?” ^ test.rb:28:语法错误,意外$ end,期待keyword_end
这是我试图构建的代码:
#!/bin/ruby
require 'find'
class MegaWatch
attr_accessor :written
#create a place holder in a file to log to about
#new files written to the disk.
def initialize(watch = Find.find('./')
@watch = watch
end
def search_dir
if @watch.nil?
puts "is empty!"
elsif @watch.responds_to?("type")
@watch.each do |watch|
File.file?(f) then "F"
File.directory?(f) then "D"
else "?"
end
end
if __FILE__ == $0
go = MegaWatch.new
go.search_dir = "/bin/"
end
任何帮助都会被爱!我这样做的原因是因为我在我的磁盘上发现了几个.... shotty文件,我想在我的系统上添加更多的命令和控制权。如果在任何建议中有一种更容易的语言可以做到这一点会非常受欢迎,只有批量转换的真正专业知识才有点......很难。
答案 0 :(得分:0)
您遇到的问题是,在ruby中,与其他语言不同,您不使用此“if”格式:
if arg then
exp
elseif arg then
exp
end
相反,ruby使用以下格式:
if arg
exp
elseif arg
exp
end
此外,您的部分代码也没有。
我不是100%肯定你想要做什么,但如果你是 试图根据文件或目录的类型返回一个字母 被拉,然后尝试这个代码。
Path = "C:/users/owner/desktop"
@array_files = Array.new
@array_directories = Array.new
def search_dir path
Dir.foreach(path).each do |filename|
@array_files << filename if File.file?(filename)
@array_directories << filename if File.directory?(filename)
end
return @array_files, @array_directories
end
puts search_dir Path
至于确定文件是否是今天制作的,你可能会遇到麻烦。 在不同的平台上,创建时间的存储方式不同。不过这里是如何在Windows上做到这一点。附:这不是最好的代码块,可以针对速度,资源,效率,可读性和稳健性进行修改;但是,我只是想让你走上正确的道路。您可能希望将部分拆分为方法或类以更好地编写代码。
require 'date'
Path = "your/path/here"
@today = Date.today.strftime('%Y-%m-%d')
files_today = []
users = []
Dir.foreach(Path) do |filename|
files_today << filename if (/(\d{4}-\d{2}-\d{2})/.match(File.ctime(filename).to_s).to_s.strip == @today)
end
puts files_today
关于第二个问题。我无法弄清楚如何务实地找到谁创建了哪些文件,但通过一些搜索,可能还有一些宝石或系统调用,你可以将工作脚本拼凑在一起。不过,这段代码应该让你开始获取用户列表来比较文件创建者! *您可能需要添加到您不想查找的用户列表中。
users = []
Dir.foreach("C:/Users")do |username|
users << username if !username.match /[.|..]/
end
puts users
答案 1 :(得分:0)
ok @schylar所以我给了他一个机会。它导致了一个实际的日志供我查看。然而,现在更多的问题。当我设置要观看的路径时,它所做的只是打印脚本的输出为/ bin / im试图找到改变它的方法。这是我现在使用的代码。
require 'date'
require 'time'
print "which directory?"
Path = gets.to_s
@today = Date.today.strftime('%Y-%m-%d')
files_today = Path
users = []
output = File.open("./directory_log.txt","w")
Dir.foreach(Path) do |filename|
files_today << filename if (/(\d{4}-\d{2}-\d{2})/.to_s.strip == @today)
end
output << files_today
好的,所以我做了大量的挖掘工作,感谢stackoverflow在您的页面中提供了大量的知识!我爱你哈哈。但这是我最终使用的代码:
require 'date'
require 'time'
Path = "/"
@today = Date.today.strftime('%Y-%m-%d')
files_today = Dir['*'].sort_by{|f| File.mtime(f)} + Path.split(',')
users = "root, guest"
output = File.open("./directory_log.txt","a")
Dir.foreach(Path) do |filename|
files_today << filename if (/(\d{4}-\d{2}-\d{2})/ == @today)
end
output << files_today
output << "\t\n\n\n\n\nScript ran at #{@today}\n"
output << "\n--------------------------------------------\n\n"
output.close
我能够从可读日志文件中的脚本中检索的输出是:
[“Untitled Document”,“tutorial.zip”,“java tutorial”, “253721-bigthumbnail.jpg”,“run.pl~”,“run.pl”,“directory_log.txt~”, “directory_log.txt”,“test.rb~”,“test.rb”,“/ bin /”]
脚本在2014-09-09运行
我想把我想出来的东西放在这里以供将来参考。再次感谢man for your pointers !!
-